Help
RSS
API
Feed
Maltego
Contact
Domain > chuchao333.github.io
×
Welcome!
Right click nodes and scroll the mouse to navigate the graph.
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-07-10
199.27.78.133
(
ClassC
)
2024-09-13
185.199.108.153
(
ClassC
)
Port 80
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 240560Server: GitHub.comContent-Type: text/html; charsetutf-8permissions-policy: interest-cohort()Last-Modified: Thu, 15 Oct 2015 09:04:36 GMTAccess-Control-Allow-Origin: *ETag: 561f6c24-3abb0expires: Fri, 13 Sep 2024 12:15:12 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: D18E:3C196D:12906AD:1311E8F:66E42A77Accept-Ranges: bytesAge: 0Date: Fri, 13 Sep 2024 12:05:12 GMTVia: 1.1 varnishX-Served-By: cache-bfi-krnt7300114-BFIX-Cache: MISSX-Cache-Hits: 0X-Timer: S1726229112.023352,VS0,VE85Vary: Accept-EncodingX-Fastly-Request-ID: 2fd52ed77c4658807fa84fa6370acac36d03b1d2 !DOCTYPE html>!--if IEMobile 7 >html classno-js iem7>!endif-->!--if lt IE 9>html classno-js lte-ie8>!endif-->!--if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)>!-->html classno-js langen>!--!endif-->head> meta charsetutf-8> title>Chaos Random Thoughts/title> meta nameauthor contentChao Chu> meta namedescription contentThe summary of my thoughts on the Scala Cake Pattern. Referenceshttp://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/http:// …> !-- http://t.co/dKP3o1e --> meta nameHandheldFriendly contentTrue> meta nameMobileOptimized content320> meta nameviewport contentwidthdevice-width, initial-scale1> link relcanonical hrefhttp://chuchao333.github.io/> link href/favicon.ico relicon> link href/stylesheets/screen.css mediascreen, projection relstylesheet typetext/css> script src/javascripts/modernizr-2.0.js>/script> script src/javascripts/ender.js>/script> script src/javascripts/octopress.js typetext/javascript>/script> link href/atom.xml relalternate titleChaos Random Thoughts typeapplication/atom+xml> !--Fonts from Googles Web font directory at http://google.com/webfonts -->link hrefhttp://fonts.googleapis.com/css?familyPT+Serif:regular,italic,bold,bolditalic relstylesheet typetext/css>link hrefhttp://fonts.googleapis.com/css?familyPT+Sans:regular,italic,bold,bolditalic relstylesheet typetext/css>link hrefhttp://fonts.googleapis.com/css?familyLato:400,700,400italic,700italic relstylesheet typetext/css>!-- mathjax config similar to math.stackexchange -->script typetext/x-mathjax-config> MathJax.Hub.Config({ tex2jax: { inlineMath: $,$, \\(,\\) , processEscapes: true } });/script>script typetext/x-mathjax-config> MathJax.Hub.Config({ tex2jax: { skipTags: script, noscript, style, textarea, pre, code } });/script>script typetext/x-mathjax-config> MathJax.Hub.Queue(function() { var all MathJax.Hub.getAllJax(), i; for(i0; i all.length; i + 1) { alli.SourceElement().parentNode.className + has-jax; } });/script>script typetext/javascript srchttp://cdn.mathjax.org/mathjax/latest/MathJax.js?configTeX-AMS-MML_HTMLorMML>/script> /head>body > header rolebanner>hgroup> h1>a href/>Chaos Random Thoughts/a>/h1> h2>Keep looking, dont settle/h2> /hgroup>/header> nav rolenavigation>ul classsubscription data-subscriptionrss> li>a href/atom.xml relsubscribe-rss titlesubscribe via RSS>RSS/a>/li> /ul> form actionhttp://google.com/search methodget> fieldset rolesearch> input typehidden nameq valuesite:chuchao333.github.io /> input classsearch typetext nameq results0 placeholderSearch/> /fieldset>/form> ul classmain-navigation> li>a href/>Blog/a>/li> li>a href/blog/archives>Archives/a>/li> li>a href/notes>Notes/a>/li> li>a href/about>About/a>/li>/ul>/nav> div idmain> div idcontent> div classblog-index> article> header> h1 classentry-title>a href/blog/2015/09/07/scala-cake-pattern/>Scala Cake Pattern/a>/h1> p classmeta> time datetime2015-09-07T18:39:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>The summary of my thoughts on the Scala Cake Pattern./p>div classsection idreferences>h2>References/h2>p>a classreference external hrefhttp://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/>http://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di//a>/p>p>a classreference external hrefhttp://www.warski.org/blog/2010/12/di-in-scala-cake-pattern/>http://www.warski.org/blog/2010/12/di-in-scala-cake-pattern//a>/p>p>a classreference external hrefhttps://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers>https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers/a>/p>p>a classreference external hrefhttp://scalatutorials.com/code/2013/07/09/scala-cake-pattern/>http://scalatutorials.com/code/2013/07/09/scala-cake-pattern//a>/p>p>a classreference external hrefhttps://groups.google.com/forum/#!msg/scala-user/DC2vUuCZmI0/RO3JYoKnj20Jcstdi>https://groups.google.com/forum/#!msg/scala-user/DC2vUuCZmI0/RO3JYoKnj20Jcstdi/a>/p>p>a classreference external hrefhttps://www.reddit.com/r/haskell/comments/1629ld/olegs_go_at_reproducing_scalas_cake_pattern/>https://www.reddit.com/r/haskell/comments/1629ld/olegs_go_at_reproducing_scalas_cake_pattern//a>/p>p>a classreference external hrefhttp://blog.originate.com/blog/2013/10/21/reader-monad-for-dependency-injection/>http://blog.originate.com/blog/2013/10/21/reader-monad-for-dependency-injection//a>/p>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/06/27/sicp-section-1-3/>SICP Section 1.3/a>/h1> p classmeta> time datetime2013-06-27T01:06:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idprocedures-as-arguments>h2>Procedures as Arguments/h2>p>Why high order procedures is useful?/p>blockquote classhighlights>Often the same programming pattern will be used with a number of differentprocedures. To express such patterns as concepts, we will need to constructprocedures that can accept procedures as arguments or return procedures asvalues. Procedures that manipulate procedures are called high-orderprocedures, they can serve as powerful abstraction mechanisms, vastlyincreaseing the expressive power of our language./blockquote>/div>div classsection idlambda>h2>Lambda/h2>ul classsimple>li>Using lambda to create anonymous functions:ul>li>strong>(define (plus4 x) (+ x 4))/strong> is em>equivalent to/em> strong>(define plus4 (lambda (x) (+ x 4)))/strong>/li>/ul>/li>li>Using lambda(let) to create local variables/li>/ul>blockquote classhighlights>Sometimes we can use internal definitions to get the same effect as with let./blockquote>p>And in which cases we couldnt get the same effect?/p>/div>div classsection idabstractions-and-first-class-procedures>h2>Abstractions and first-class procedures/h2>blockquote classhighlights>As programmers, we should be alert to oppotunities to identify the underlyingabstractions in our programs and to build upon then and generalize them tocreate more powerful abstractions. This is not to say one should always writeprograms in the most abstract way possible; expert programmers know how tochoose the level of abstraction appropriate to their task. But its importantto be able to think in terms of these abstractions, so that we can be readyto apply them in new contexts./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.29/strong>Answer:/p>p>This is not very hard, just simply translate the simpson rule definition to code:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>simpson-rule/span> span classnv>f/span> span classnv>a/span> span classnv>b/span> span classnv>n/span>span classp>)/span>/span>span classline> span classc1>; still use 'define' since we haven't learned 'let' till now/span>/span>span classline> span classp>(/span>span classk>define /span>span classnv>h/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classnv>b/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>))/span>/span>span classline> span classc1>; the procedure to compute 'yk', the helper method used by 'term'/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>y/span> span classnv>k/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnb>* /span>span classnv>k/span> span classnv>h/span>span classp>))))/span>/span>span classline> span classc1>; get the 'next and 'term for the sum procedure/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>next/span> span classnv>k/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>k/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>term/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classk>cond /span>span classp>((/span>span classk>or /span>span classp>(/span>span classnb> /span>span classnv>k/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb> /span>span classnv>k/span> span classnv>n/span>span classp>))/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>k/span>span classp>)/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>odd? /span>span classnv>k/span>span classp>)/span> span classmi>4/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>y/span> span classnv>k/span>span classp>)))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>* /span>span classnv>h/span> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classmi>0/span> span classnv>next/span> span classnv>n/span>span classp>))/span> span classmi>3/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>integral/span> span classnv>f/span> span classnv>a/span> span classnv>b/span> span classnv>dx/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>add-dx/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>sum/span> span classnv>f/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnb>/ /span>span classnv>dx/span> span classmf>2.0/span>span classp>))/span> span classnv>add-dx/span> span classnv>b/span>span classp>)/span> span classnv>dx/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>simpson-rule/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>100.0/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>simpson-rule/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>1000.0/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>integral/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>0.01/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>integral/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>0.001/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; the output:/span>/span>span classline>span classc1>; 0.24999998999999987/span>/span>span classline>span classc1>; 0.24999999999900027/span>/span>span classline>span classc1>; 0.24998750000000042/span>/span>span classline>span classc1>; 0.249999875000001/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.30/strong>Answer:/p>p>Put both the recursive and iterative versions here to compare:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-iter/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>a/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>10/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>They produce the same results as expected./p>p>strong>1.31/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>1/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product-iter/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>cur/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>cur/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>cur/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>term/span> span classnv>cur/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>factorial/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>identity/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product/span> span classnv>identity/span> span classmi>1/span> span classnv>inc/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>factorial/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>factorial/span> span classmi>10/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; compute the approximations to PI using the formula:/span>/span>span classline>span classc1>;; PI 2*4*4*6*6*8.../span>/span>span classline>span classc1>;; -- --------------/span>/span>span classline>span classc1>;; 4 3*3*5*5*7*7.../span>/span>span classline>/span>span classline>span classc1>;; here, term is (2n/(2n + 1) * 2(n+1) /(2n + 1)), n 1, 2, 3, .../span>/span>span classline>span classp>(/span>span classnf>//span>/span>span classline> span classp>(/span>span classnf>product-iter/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classmi>2/span> span classp>(/span>span classnb>+ /span>span classnv>n/span> span classmf>1.0/span>span classp>))))/span>/span>span classline> span classmi>1/span>/span>span classline> span classnv>inc/span>/span>span classline> span classmi>50/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product-iter/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classmf>1.0/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classmf>1.0/span>span classp>)))/span>/span>span classline> span classmi>1/span>/span>span classline> span classnv>inc/span>/span>span classline> span classmi>50/span>span classp>)/span>/span>span classline>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>There might be better ways to translate the formula. The solution above theis not veru accurate and if the upper bound is too large (say 100), it willyield to nan+./p>p>strong>1.32/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>null-value/span>/span>span classline> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>accumulate-iter/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>cur/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>cur/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>cur/span>span classp>)/span> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>cur/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classnv>null-value/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classc1>; (accumulate + 0 term a next b))/span>/span>span classline> span classp>(/span>span classnf>accumulate-iter/span> span classnv>+/span> span classmi>0/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classc1>; (accumulate * 1 term a next b))/span>/span>span classline> span classp>(/span>span classnf>accumulate-iter/span> span classnv>*/span> span classmi>1/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.33/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>null-value/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>filter/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>prime?/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classnv>n/span> span classp>(/span>span classnf>smallest-divisor/span> span classnv>n/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>smallest-divisor/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classnv>test-divisor/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb>> /span>span classp>(/span>span classnf>square/span> span classnv>test-divisor/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>divides?/span> span classnv>test-divisor/span> span classnv>n/span>span classp>)/span> span classnv>test-divisor/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classp>(/span>span classnb>+ /span>span classnv>test-divisor/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>divides?/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classnv>b/span> span classnv>a/span>span classp>)/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>identity/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; return a procedure Integer -> Boolean/span>/span>span classline>span classc1>; that check if the given integer is relative prime with n/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>relative-prime?/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>gcd /span>span classnv>n/span> span classnv>a/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classnv>f/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>gcd /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>a/span>/span>span classline> span classp>(/span>span classnb>gcd /span>span classnv>b/span> span classp>(/span>span classnb>remainder /span>span classnv>a/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>+/span> span classmi>0/span> span classnv>square/span> span classmi>2/span> span classnv>inc/span> span classmi>10/span> span classnv>prime?/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>*/span> span classmi>1/span> span classnv>identity/span> span classmi>1/span> span classnv>inc/span> span classmi>10/span> span classp>(/span>span classnf>relative-prime?/span> span classmi>10/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.34/strong>Answer:/p>p>Apply (f f) with get (f 2), while tring to apply (f 2), error will be issuedsince a procedure is expected but an integer parameter 2 is given./p>p>strong>1.35/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; since the golden-ratio x satisfies that x^2 x + 1/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>golden-ratio/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classmi>1/span> span classp>(/span>span classnb>/ /span>span classmi>1/span> span classnv>x/span>span classp>)))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>golden-ratio/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.36/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>span classline-number>48/span>span classline-number>49/span>span classline-number>50/span>span classline-number>51/span>span classline-number>52/span>span classline-number>53/span>span classline-number>54/span>span classline-number>55/span>span classline-number>56/span>span classline-number>57/span>span classline-number>58/span>span classline-number>59/span>span classline-number>60/span>span classline-number>61/span>span classline-number>62/span>span classline-number>63/span>span classline-number>64/span>span classline-number>65/span>span classline-number>66/span>span classline-number>67/span>span classline-number>68/span>span classline-number>69/span>span classline-number>70/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>display /span>span classs>"current guess is: "/span> span classp>)/span>/span>span classline> span classp>(/span>span classnb>display /span>span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>newline/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; without average damping/span>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classmi>1000/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classnv>x/span>span classp>)))/span> span classmf>2.0/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; output below:/span>/span>span classline>span classc1>; current guess is: 2.0/span>/span>span classline>span classc1>; current guess is: 9.965784284662087/span>/span>span classline>span classc1>; current guess is: 3.004472209841214/span>/span>span classline>span classc1>; current guess is: 6.279195757507157/span>/span>span classline>span classc1>; current guess is: 3.759850702401539/span>/span>span classline>span classc1>; current guess is: 5.215843784925895/span>/span>span classline>span classc1>; current guess is: 4.182207192401397/span>/span>span classline>span classc1>; current guess is: 4.8277650983445906/span>/span>span classline>span classc1>; current guess is: 4.387593384662677/span>/span>span classline>span classc1>; current guess is: 4.671250085763899/span>/span>span classline>span classc1>; current guess is: 4.481403616895052/span>/span>span classline>span classc1>; current guess is: 4.6053657460929/span>/span>span classline>span classc1>; current guess is: 4.5230849678718865/span>/span>span classline>span classc1>; current guess is: 4.577114682047341/span>/span>span classline>span classc1>; current guess is: 4.541382480151454/span>/span>span classline>span classc1>; current guess is: 4.564903245230833/span>/span>span classline>span classc1>; current guess is: 4.549372679303342/span>/span>span classline>span classc1>; current guess is: 4.559606491913287/span>/span>span classline>span classc1>; current guess is: 4.552853875788271/span>/span>span classline>span classc1>; current guess is: 4.557305529748263/span>/span>span classline>span classc1>; current guess is: 4.554369064436181/span>/span>span classline>span classc1>; current guess is: 4.556305311532999/span>/span>span classline>span classc1>; current guess is: 4.555028263573554/span>/span>span classline>span classc1>; current guess is: 4.555870396702851/span>/span>span classline>span classc1>; current guess is: 4.555315001192079/span>/span>span classline>span classc1>; current guess is: 4.5556812635433275/span>/span>span classline>span classc1>; current guess is: 4.555439715736846/span>/span>span classline>span classc1>; current guess is: 4.555599009998291/span>/span>span classline>span classc1>; current guess is: 4.555493957531389/span>/span>span classline>span classc1>; current guess is: 4.555563237292884/span>/span>span classline>span classc1>; current guess is: 4.555517548417651/span>/span>span classline>span classc1>; current guess is: 4.555547679306398/span>/span>span classline>span classc1>; current guess is: 4.555527808516254/span>/span>span classline>span classc1>; current guess is: 4.555540912917957/span>/span>span classline>span classc1>; 4.555532270803653/span>/span>span classline>/span>span classline>span classc1>; with average damping/span>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classmi>1000/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classnv>x/span>span classp>)))/span> span classmi>2/span>span classp>))/span> span classmf>2.0/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; output below:/span>/span>span classline>span classc1>; current guess is: 2.0/span>/span>span classline>span classc1>; current guess is: 5.9828921423310435/span>/span>span classline>span classc1>; current guess is: 4.922168721308343/span>/span>span classline>span classc1>; current guess is: 4.628224318195455/span>/span>span classline>span classc1>; current guess is: 4.568346513136242/span>/span>span classline>span classc1>; current guess is: 4.5577305909237005/span>/span>span classline>span classc1>; current guess is: 4.555909809045131/span>/span>span classline>span classc1>; current guess is: 4.555599411610624/span>/span>span classline>span classc1>; current guess is: 4.5555465521473675/span>/span>span classline>span classc1>; 4.555537551999825/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.37/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; k-term finite continued fraction/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>frac/span> span classnv>i/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnf>frac/span> span classp>(/span>span classnb>+ /span>span classnv>i/span> span classmi>1/span>span classp>))))))/span>/span>span classline> span classp>(/span>span classnf>frac/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac-iter/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; k 10 produce 0.6179775280898876/span>/span>span classline>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>cont-frac-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; k 11 produce 0.6180555555555556/span>/span>span classline>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>11/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>cont-frac-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>11/span>span classp>)/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; TODO: implement a procedure to retry different k until the first/span>/span>span classline>span classc1>; one that produce the value accurate to 4 decimal./span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.38/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; if i % 3 2, (d i) 2 * ((i + 1) / 3)/span>/span>span classline>span classc1>; else (d i) 1/span>/span>span classline>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>r/span> span classp>(/span>span classnb>remainder /span>span classnv>i/span> span classmi>3/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>r/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classmf>2.0/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classmi>3/span>span classp>))/span>/span>span classline> span classmf>1.0/span>span classp>)))/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline> span classmi>2/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.39/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; if i 1, (n i) -x else (n i) -x^2/span>/span>span classline>span classc1>; (d i) 2 * i - 1/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>tan-cf/span> span classnv>x/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>x/span>/span>span classline> span classp>(/span>span classnb>- /span>span classmi>0/span>span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classnb>- /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>i/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classnv>k/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; tan (pi / 8)/span>/span>span classline>span classp>(/span>span classnf>tan-cf/span> span classmf>0.4/span> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; tan (pi / 4)/span>/span>span classline>span classp>(/span>span classnf>tan-cf/span> span classmf>0.7853981633974483/span> span classmi>10/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.40/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>span classline-number>48/span>span classline-number>49/span>span classline-number>50/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average-damp/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>a/span> span classnv>b/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>x/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classc1>;; re-write the square-root procedure/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>sqrt /span>span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>average-damp/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>)))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classc1>;; cube root, similar with above/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube-root/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>average-damp/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnf>square/span> span classnv>y/span>span classp>))))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classnv>dx/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>deriv/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>g/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>))/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))/span> span classnv>dx/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>newton-transform/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>- /span>span classnv>x/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>)/span> span classp>((/span>span classnf>deriv/span> span classnv>g/span>span classp>)/span> span classnv>x/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>newton-method/span> span classnv>g/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>newton-transform/span> span classnv>g/span>span classp>)/span> span classnv>guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cubic/span> span classnv>a/span> span classnv>b/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>))/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>x/span>span classp>)/span> span classnv>c/span>span classp>)))/span>/span>span classline>/span>span classline>span classc1>; zero of x^3 + x^2 + x + 1/span>/span>span classline>span classc1>; should be -1/span>/span>span classline>span classp>(/span>span classnf>newton-method/span> span classp>(/span>span classnf>cubic/span> span classmi>1/span> span classmi>1/span> span classmi>1/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.41/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>;; Note: it's a little confusing at first, 'double' is not apply the function/span>/span>span classline>span classc1>;; 'f' and double the result, it's 'DOUBLE' the application of the function/span>/span>span classline>span classc1>;; 'f'./span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>((/span>span classnf>double/span> span classnv>inc/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline>span classp>(((/span>span classnf>double/span> span classnv>double/span>span classp>)/span> span classnv>inc/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; this will get 21/span>/span>span classline>span classp>(((/span>span classnf>double/span> span classp>(/span>span classnf>double/span> span classnv>double/span>span classp>))/span> span classnv>inc/span>span classp>)/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.42/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>((/span>span classnf>compose/span> span classnv>square/span> span classnv>inc/span>span classp>)/span> span classmi>6/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.43/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>((/span>span classnf>repeated/span> span classnv>square/span> span classmi>2/span>span classp>)/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.44/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>n-fold-smooth/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>repeated/span> span classp>(/span>span classnf>smooth/span> span classnv>f/span>span classp>)/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>smooth/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>dx/span> span classmf>0.0001/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>dx/span>span classp>))/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>)))/span> span classmi>3/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>((/span>span classnf>n-fold-smooth/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classmf>1.0/span> span classnv>x/span>span classp>))/span> span classmi>3/span>span classp>)/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>((/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classmf>1.0/span> span classnv>x/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.45/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; from the experiments, the nth root requires at least log2(n) average damps/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>nth-root/span> span classnv>x/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span>/span>span classline> span classp>((/span>span classnf>repeated/span> span classnv>average-damp/span> span classp>(/span>span classnb>floor /span>span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classnv>n/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classmi>2/span>span classp>))))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnb>expt /span>span classnv>y/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough?/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>1/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classc1>; (display next)/span>/span>span classline> span classc1>; (newline)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough?/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average-damp/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>x/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>16/span> span classmi>4/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>32/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>64/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>128/span> span classmi>7/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>256/span> span classmi>8/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>10000000000000000000000000000000000000000000000000000000000000000/span> span classmi>64/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.46/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iterative-improve/span> span classnv>enough?/span> span classnv>improve/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next-guess/span> span classp>(/span>span classnf>improve/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>enough?/span> span classnv>guess/span> span classnv>next-guess/span>span classp>)/span>/span>span classline> span classnv>guess/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next-guess/span>span classp>))))/span>/span>span classline> span classnv>try/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>iterative-improve/span> span classnv>close-enough?/span> span classnv>f/span>span classp>)/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>sqrt /span>span classnv>x/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>iterative-improve/span>/span>span classline> span classnv>close-enough?/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>y/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>))))/span>/span>span classline> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough?/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>4/span>span classp>)/span>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>9/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classnv>cos/span> span classmf>1.0/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/06/14/sicp-section-1-2/>SICP Section 1.2/a>/h1> p classmeta> time datetime2013-06-14T00:54:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idrecursive-process-v-s-iterative-process>h2>Recursive Process V.S. Iterative Process/h2>ul>li>p classfirst>Recursive process/p>p>The substitution model of a recursive process reveals a shape of expansionfollowed by constraction. The expansion occurs as the process builds up achain of defered operations. The contraction occurs as the operations areactually performed./p>/li>li>p classfirst>Iterative process/p>p>An iterative process is one whose state can be summarized by a fixed numberof state variables, together with a fixed rule that describes how the statevariables should be updated as the process moves from state to state and an(optional) end test that specifies the conditions under which the processshould terminate./p>/li>/ul>p>In the iterative case, the program variables provide a complete descriptionof the state of the process at any point, while in the recursive case, thereis some additional "hidden" information, maintained by the interpreter and notcontained in the program variables./p>blockquote classhighlights>In contrasting iteration and recursion, we must be careful not to confusethe notion of a recursive process with the notion of a recursive procedure.When we describe a procedure as recursive, we are referring to thesyntactic fact that the procedure definition refers (either directly orindirectly) to the procedure itself. But when we describe a process asfollowing a pattern that is, say, linearly recursive, we are speaking abouthow the process evolves, not about the syntax of how a procedure is written.It may seem disturbing that we refer to a recursive procedure as generatingan iterative process./blockquote>/div>div classsection idlame-s-theorem>h2>Lames Theorem/h2>blockquote classhighlights>If Euclids Algorithm requires k steps to compute the GCD of some pair,then the smaller number in the pair must be greater than or equal to thekth Fibonacci number./blockquote>/div>div classsection idfermat-s-little-theorem>h2>Fermats Little Theorem/h2>blockquote classhighlights>If n is a prime number and a is any positive integer less than n, then araised to the nth power is congruent to a modulo n./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.9/strong>Answer: The first process is recursive and the second one is iterative./p>p>strong>1.10/strong>Answer: from the definition of (A x y), we have:/p>p>(A 1 10) A(0 (A 1 9)) 2 * (A 1 9) ... 2^9 * (A 1 1) 2^10/p>p>(A 2 4) 65536/p>p>(A 3 3) 65536/p>p>(f n) computes em>2n/em>/p>p>(g n) computes em>2^n/em>/p>p>(h n) computes em>2^2^2... (n times)/em>/p>p>strong>1.11/strong>Answer: This is similar with the example of computing Fibonacci number./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-recursive/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>0/span>span classp>)/span> span classmi>0/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>2/span>span classp>))/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>3/span>span classp>))/span> span classmi>3/span>span classp>)))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-iterative/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>f-iter/span> span classmi>0/span> span classmi>1/span> span classmi>2/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-iter/span> span classnv>a/span> span classnv>b/span> span classnv>c/span> span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>0/span>span classp>)/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>1/span>span classp>)/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>2/span>span classp>)/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>f-iter/span> span classnv>b/span> span classnv>c/span> span classp>(/span>span classnb>+ /span>span classnv>c/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classmi>2/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classmi>3/span>span classp>))/span> span classp>(/span>span classnb>- /span>span classnv>count/span> span classmi>1/span>span classp>)))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.12/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; both row and col indexes start at 0/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>pascal-triangle/span> span classnv>row/span> span classnv>col/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>col/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>row/span> span classnv>col/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>pascal-triangle/span> span classp>(/span>span classnb>- /span>span classnv>row/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>- /span>span classnv>col/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>pascal-triangle/span> span classp>(/span>span classnb>- /span>span classnv>row/span> span classmi>1/span>span classp>)/span> span classnv>col/span>span classp>)))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.15/strong>Answer:/p>p>a. from the the procedure definition, suppose em>p/em> will be called t times,we have:/p>p>a / (3^t) < 0.1, which leads to:/p>p>log(10a) < t, so t ceiling (log(10a)) 5, (the base of the log is 3)/p>p>b. both the space and number of steps depend on how many times em>p/em> is called,so its O(t) O(log(a))./p>p>strong>1.16/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fast-expt/span> span classnv>b/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classnv>n/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classnv>n/span> span classnv>product/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>0/span>span classp>)/span> span classnv>product/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>n/span>span classp>)/span> span classp>(/span>span classnf>fast-expt-iter/span> span classp>(/span>span classnf>square/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classnv>product/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>product/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>even? /span>span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classmi>0/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.17/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classmi>0/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>b/span>span classp>)/span> span classp>(/span>span classnf>mul/span> span classp>(/span>span classnf>double/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>halve/span> span classnv>b/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnf>mul/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>b/span> span classmi>1/span>span classp>))))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>halve/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.18/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classnv>b/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classnv>b/span> span classnv>sum/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classnv>sum/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>b/span>span classp>)/span> span classp>(/span>span classnf>mul-iter/span> span classp>(/span>span classnf>double/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>halve/span> span classnv>b/span>span classp>)/span> span classnv>sum/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>b/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classnv>sum/span>span classp>)))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>halve/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.19/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; use the matrix multiplication to represent the transformation/span>/span>span classline>/span>span classline>span classc1>; 0 1/span>/span>span classline>span classc1>; (fib(n-1), fib(n)) * (fib(n), fib(n-1) + fib(n)) (fib(n), fib(n+1))/span>/span>span classline>span classc1>; 1 1/span>/span>span classline>/span>span classline>span classc1>; a <- a + b/span>/span>span classline>span classc1>; b <- a/span>/span>span classline>/span>span classline>span classc1>; the state transformation above is just a special case of the below one when/span>/span>span classline>span classc1>; p 0 and q 1/span>/span>span classline>/span>span classline>span classc1>; a <- bq + aq + ap/span>/span>span classline>span classc1>; b <- bp + aq/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fib/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fib-iter/span> span classmi>1/span> span classmi>0/span> span classmi>0/span> span classmi>1/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fib-iter/span> span classnv>a/span> span classnv>b/span> span classnv>p/span> span classnv>q/span> span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>0/span>span classp>)/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fib-iter/span>/span>span classline> span classnv>a/span>/span>span classline> span classnv>b/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>p/span>span classp>)/span> span classp>(/span>span classnf>square/span> span classnv>q/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>p/span> span classnv>q/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classnv>count/span> span classmi>2/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fib-iter/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>p/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>p/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>q/span>span classp>))/span>/span>span classline> span classnv>p/span>/span>span classline> span classnv>q/span>/span>span classline> span classp>(/span>span classnb>- /span>span classnv>count/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.21/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; the following expressions produce/span>/span>span classline>span classc1>; 199/span>/span>span classline>span classc1>; 1999/span>/span>span classline>span classc1>; 7/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>199/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>1999/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>19999/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.25/strong>Answer:/p>p>Since em>Scheme/em> has built-in support for arbitrary precision arithmetic, theprocedure will produce the same result as the original em>expmod/em>, however,it will be very inefficient since the huge number arithmetic will take muchlonger time than the numbers can be represented by a single computer word./p>p>The original em>expmod/em> used the successive squaring, the numbers to be processedwill never be larger than m^2./p>p>strong>1.26/strong>Answer:/p>p>With the calling of em>square/em>, the original problem can be reduced to a subproblem with half of the size at each of the step when even? test is true.So T(n) T(n/2) O(logn)/p>p>However, if the explicit multiplication used instead, the recursive callof expmod will be evaluated twice, it not only just compute the subproblems two time, it is actually a tree recursion like the first solutionfor computing fibnacci sequence, so the number of expmod calls growexponentially, which conclues that T(n) O(2^n * logn) O(n)/p>p>strong>1.27/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fermat-test/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classnv>a/span>span classp>)/span> span classnv>true/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classp>(/span>span classnf>expmod/span> span classnv>a/span> span classnv>n/span> span classnv>n/span>span classp>)/span> span classnv>a/span>span classp>))/span> span classnv>false/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classnv>exp/span> span classnv>m/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>exp/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>exp/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnf>square/span> span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classp>(/span>span classnb>/ /span>span classnv>exp/span> span classmi>2/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>base/span> span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classp>(/span>span classnb>- /span>span classnv>exp/span> span classmi>1/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; Carmichael numbers/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these all give #t/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these all give #f/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.28/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>miller-rabin-test/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try-it/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnf>expmod-with-signal/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>try-it/span> span classp>(/span>span classnb>+ /span>span classmi>2/span> span classp>(/span>span classnf>random/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>2/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classnv>exp/span> span classnv>m/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>exp/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>exp/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>square-with-signal/span> span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classp>(/span>span classnb>/ /span>span classnv>exp/span> span classmi>2/span>span classp>)/span> span classnv>m/span>span classp>)/span> span classnv>m/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>else/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>base/span> span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classp>(/span>span classnb>- /span>span classnv>exp/span> span classmi>1/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square-with-signal/span> span classnv>a/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classk>and /span>span classp>(/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classnv>a/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>)))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these will all give #f with quite a chance, but with enough runs, it will/span>/span>span classline>span classc1>; have some false positive/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>newline/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>7/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>23/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>103/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1009/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1019/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1000033/span>span classp>)/span>/span>span classline>span classc1>; these will always all give #t/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/05/14/sicp-section-1-1/>SICP Section 1.1/a>/h1> p classmeta> time datetime2013-05-14T00:39:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>blockquote classhighlights>Computational processes are abstract beings that inhabit computers. As theyevolve, processes manipulate other abstract things called data. The evolutionof a process is directed by pattern of rules called a program./blockquote>p>Why use Lisp for the book?/p>blockquote classhighlights>The most significant unique feature of Lisp is the fact that Lisp descriptionsof processes, called procedures, can themselves be represented and manipulatedas Lisp data. The importance of this is that there are powerful program-designtechniques that rely on the ability to blur the traditional distinction between"passive" data and "active" processes./blockquote>p>The three mechanisms of combining simple ideas to form more complex ideas in anypowerful programming languages:/p>ol classarabic simple>li>primitive expressions/li>li>means of combination/li>li>means of abstraction/li>/ol>div classsection idsubstitution-model>h2>Substitution model/h2>ul>li>p classfirst>Applicative order/p>p>Evaluate the operator and operands first and then applies the resulting procedureto the resulting arguments. "Fully expand and then reduce"/p>/li>li>p classfirst>Normal order/p>p>Dont evaluate the operands until their values are needed, instead, substituteoperand expressions for parameters until it obtained an expression involving onlyprimitive operators, and would then perform the evaluation. "Evaluate thearguments and then apply"/p>/li>/ul>/div>div classsection idexample-square-roots-by-newton-s-method>h2>Example: Square Roots by Newtons Method/h2>blockquote classhighlights>The contrast between function and procedure is a reflection of the generaldistinction between describing properties of things and describing how todo things, or, as it is sometimes refered to, the distinction betweendeclarative knowledge and imperative knowledge. In mathematics we areusually concerned with declarative (what is) descriptions, whereas incomputer science we are usually concerned with imperative (how to)descriptions./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.3/strong> Define a procedure that takes three numbers as arguments and return thesum of squares of the two larger numbers./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-of-squares/span> span classnv>a/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>square/span> span classnv>b/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>min /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>< /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>a/span>/span>span classline> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>max /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>< /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>b/span>/span>span classline> span classnv>a/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-of-squares-of-2-largest/span> span classnv>a/span> span classnv>b/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum-of-squares/span> span classp>(/span>span classnb>max /span>span classnv>a/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>max /span>span classnv>c/span> span classp>(/span>span classnb>min /span>span classnv>a/span> span classnv>b/span>span classp>))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.4/strong> Observe that our model of evaluation allows for combinations whoseoperators are compound expressions. Use this observation to describe thebehavior of the following procedure:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>a-plus-abs-b/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classnv>+/span> span classnv>-/span>span classp>)/span> span classnv>a/span> span classnv>b/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>if b is greater than 0, the operator that will apply to a and b is +, or elseit will be -, so the a-plus-abs-b will always result in a plus abs of b./p>p>strong>1.5/strong>Answer: the interpreter that uses applicative order evaluation will hang dueto the infinite recursive call of p, while an interpreter that uses normalorder evaluation will get 0./p>p>em>Note:/em> strong>p/strong> is a function, strong>(p)/strong> is a call to function p./p>p>strong>1.6/strong>Answer: the interpreter will hang due to the infinite recursive call toem>sqrt-iter/em>. Since List uses applicative order evaluation, in the definitionof new-if, the else-clause will always be evaluated no matter the result ofthe predicate, thus lead to infinite recursive call to sqrt-iter. Thats whystrong>if/strong> needs to be a special form, the predicate expression is evaluated first,and the result determines whether to evaluate the consequent or the alternativeexpression./p>p>strong>1.7/strong>Answer: For small values, the absolute tolerance 0.001 is too large, so theresults become inaccurate. For example, (sqrt 0.001) gives 0.04124542607499115on my machine. (ubuntu 12.10 x86_64); And for large values, due to the precisionlimitation of float-point representation, the guess couldnt be refined to avalue that can be represented within the tolerance. In such cases, the programcan endlessly alternate between two guesses that are more than 0.001 away fromthe true square root./p>p>so, instead of using absolute tolerance, we changed to use the relativetolerance of two continuous guess values. This can be demonstrated with thebelow updated good-enough? procedure:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>guess/span>span classp>))/span> span classmf>0.001/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.8/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cbrt-iter/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classnv>guess/span>/span>span classline> span classp>(/span>span classnf>cbrt-iter/span> span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnf>square/span> span classnv>guess/span>span classp>))/span> span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>guess/span>span classp>))/span> span classmi>3/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>guess/span>span classp>))/span> span classmf>0.001/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cbrt/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>cbrt-iter/span> span classmf>1.0/span> span classnv>x/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>The only difference between cbrt and sqrt is the strong>improve/strong> procedure./p>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/01/06/coursera-online-functional-programming-course-review/>Coursera Online Functional Programming Course - a Retrospective/a>/h1> p classmeta> time datetime2013-01-06T15:52:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>Here comes the summary of the Coursera coursea classreference external hrefhttps://class.coursera.org/progfun-2012-001/class/index>Fucntional Programming Principles in Scala/a>Its a little bit late, it has been two months since I finished the course.This is the first Coursera course I followed from the very beginning to the endand accomplished all the programming assignments with full scores, which helpedme to get the certificate with distinction./p>img alt/images/posts/coursera_scala_certificate.jpg src/images/posts/coursera_scala_certificate.jpg />p>First the excellent parts of the course:/p>ul classsimple>li>Martin Odersky is a pretty good teacher, and all the lectures are welldesigned. I enjoyed watching the lectures a lot and most of which I haveread more than once./li>li>The programming assignments are well structured, with detailed instructionsand step by step guide. In each of the assignments, the whole task is splitinto several steps with approprivate level of abstractions./li>li>There are also many useful supporting materials like scala style guide, sbttutorial, instructions on tools setup for the course, which made it easierto concentrate on the course content. For me, I dont have scala developenvironment setup before the course, and by following the tools setup sectionin only took me less than half an hour to get everything ready for trying theexample code and the assignments./li>/ul>p>As for the less-good things, I would say:/p>ul classsimple>li>Both the lectures and the assignments are quite easy for an experiencedprogrammers (No functional programming background needed), I was expectingmore challenging stuff./li>li>There are no official solutions distributed. (The course will be offeredagain some time later) However, I still think for those students who passedthe course should be qualified to get the solutions so that they can comparethose with their own to see where they can still improve./li>li>Its a pity that this is only the first half of an advanced undergraduatecourse that Martin taught on campus. I am interested in the other half./li>/ul>p>After taking this cousre, I got a deeper understanding of the functionalprogramming basics and it made me feel more comfortable while picking upSICP again (after 3 years). Now, I am convinced that I am able to go throughSICP and finish most of the exercises. Also, I had a firmer grasp of Scalaeven though I didnt write more than 100 lines of Scala before; I understandmore about the scala syntax, idioms and even the motivations behind some of thelanguage structures. E.g., call by name/value, lazy evaluation, currying,pattern matching and so on. I will publish my detailed notes on the lecturesand assignments to this blog later./p>p>To conclude, I really enjoyed taking the course and many thanks to Martin, the TAs, and also the coursera staff for offering such a wonderful course./p>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/21/python-abc/>Python Abc/a>/h1> p classmeta> time datetime2012-08-21T21:06:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>This module provides the infrastructure for defininga classreference external hrefhttp://docs.python.org/glossary.html#term-abstract-base-class>abstract base classes/a>(ABCs) in Python. The ABCs define a minimal set of methods that establish thecharacteristic behavior of the type. For more details about this, seea classreference external hrefhttp://www.python.org/dev/peps/pep-3119/>PEP 3119/a>./p>/div>div classsection idhighlights>h2>Highlights/h2>p>The module provides a a classreference external hrefhttp://docs.python.org/glossary.html#term-metaclass>metaclass/a>used to create ABCs. An ABC can be subclassed directly. The class also has a registermethod to register unrelated concrete classes (including built-in classes) and unrelatedABCs as virtual subclasses/p>p>Also there are two decorators em>abstractmethod/em> and em>abstractproperty/em>, which will setthe function objects attribute __isabstractmethod__ to True. Only when all of theabstract methods and abstract properties are overriden, can a class that has a metaclassderived from ABCMeta be instantiated./p>/div>div classsection idcode-comments>h2>Code comments/h2>div classsection idabcmeta-new>h3>ABCMeta.__new__/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>__new__/span>span classp>(/span>span classn>mcls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classn>bases/span>span classp>,/span> span classn>namespace/span>span classp>):/span>/span>span classline> span classn>cls/span> span classo>/span> span classnb>super/span>span classp>(/span>span classn>ABCMeta/span>span classp>,/span> span classn>mcls/span>span classp>)/span>span classo>./span>span classn>__new__/span>span classp>(/span>span classn>mcls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classn>bases/span>span classp>,/span> span classn>namespace/span>span classp>)/span>/span>span classline> span classc># Compute set of abstract method names/span>/span>span classline> span classn>abstracts/span> span classo>/span> span classnb>set/span>span classp>(/span>span classn>name/span>/span>span classline> span classk>for/span> span classn>name/span>span classp>,/span> span classn>value/span> span classow>in/span> span classn>namespace/span>span classo>./span>span classn>items/span>span classp>()/span>/span>span classline> span classk>if/span> span classnb>getattr/span>span classp>(/span>span classn>value/span>span classp>,/span> span classs>"__isabstractmethod__"/span>span classp>,/span> span classbp>False/span>span classp>))/span>/span>span classline> span classk>for/span> span classn>base/span> span classow>in/span> span classn>bases/span>span classp>:/span>/span>span classline> span classk>for/span> span classn>name/span> span classow>in/span> span classnb>getattr/span>span classp>(/span>span classn>base/span>span classp>,/span> span classs>"__abstractmethods__"/span>span classp>,/span> span classnb>set/span>span classp>()):/span>/span>span classline> span classn>value/span> span classo>/span> span classnb>getattr/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classbp>None/span>span classp>)/span>/span>span classline> span classk>if/span> span classnb>getattr/span>span classp>(/span>span classn>value/span>span classp>,/span> span classs>"__isabstractmethod__"/span>span classp>,/span> span classbp>False/span>span classp>):/span>/span>span classline> span classn>abstracts/span>span classo>./span>span classn>add/span>span classp>(/span>span classn>name/span>span classp>)/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>__abstractmethods__/span> span classo>/span> span classnb>frozenset/span>span classp>(/span>span classn>abstracts/span>span classp>)/span>/span>span classline>/span>span classline> span classc># chaoc: caches are the typical usages of weak references/span>/span>span classline>/span>span classline> span classc># Set up inheritance registry/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_registry/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_cache/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache_version/span> span classo>/span> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span>/span>span classline> span classk>return/span> span classn>cls/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>ul classsimple>li>It first creates a type object cls. (super(ABCMeta, mcls) is type)/li>li>Iterate through all the attributes (including all the attributes inheritedfrom all the bases), if any of them have __isabstractmethod__ set to true,add it to clss __abstractmethods__./li>li>Initialize the attributes _abc_registry, _abc_cache, _abc_negative_cacheand _abc_negative_cache_version, which are used to speed up the check in__instancecheck__ and __subclasscheck__./li>/ul>/div>div classsection idabcmeta-register-cls-subclass>h3>ABCMeta.register(cls, subclass)/h3>p>See the added comments in line/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>register/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>subclass/span>span classp>):/span>/span>span classline> span classsd>"""Register a virtual subclass of an ABC."""/span>/span>span classline> span classc># chaoc: sanity check to make sure that subclass is class type/span>/span>span classline> span classc># either a type object (for new style classes) or the type is/span>/span>span classline> span classc># the same as ClassType(for old style classes)/span>/span>span classline> span classk>if/span> span classow>not/span> span classnb>isinstance/span>span classp>(/span>span classn>subclass/span>span classp>,/span> span classp>(/span>span classnb>type/span>span classp>,/span> span classn>types/span>span classo>./span>span classn>ClassType/span>span classp>)):/span>/span>span classline> span classk>raise/span> span classne>TypeError/span>span classp>(/span>span classs>"Can only register classes"/span>span classp>)/span>/span>span classline> span classk>if/span> span classnb>issubclass/span>span classp>(/span>span classn>subclass/span>span classp>,/span> span classn>cls/span>span classp>):/span>/span>span classline> span classk>return/span> span classc># Already a subclass/span>/span>span classline> span classc># Subtle: test for cycles *after* testing for "already a subclass";/span>/span>span classline> span classc># this means we allow X.register(X) and interpret it as a no-op./span>/span>span classline> span classk>if/span> span classnb>issubclass/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>subclass/span>span classp>):/span>/span>span classline> span classc># This would create a cycle, which is bad for the algorithm below/span>/span>span classline> span classk>raise/span> span classne>RuntimeError/span>span classp>(/span>span classs>"Refusing to create an inheritance cycle"/span>span classp>)/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_registry/span>span classo>./span>span classn>add/span>span classp>(/span>span classn>subclass/span>span classp>)/span>/span>span classline> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span> span classo>+/span> span classmi>1/span> span classc># Invalidate negative cache/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idabcmeta-instancecheck>h3>ABCMeta.__instancecheck__/h3>p>See the added comments in line/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>__instancecheck__/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>instance/span>span classp>):/span>/span>span classline> span classsd>"""Override for isinstance(instance, cls)."""/span>/span>span classline> span classc># Inline the cache checking when it's simple./span>/span>span classline> span classn>subclass/span> span classo>/span> span classnb>getattr/span>span classp>(/span>span classn>instance/span>span classp>,/span> span classs>'__class__'/span>span classp>,/span> span classbp>None/span>span classp>)/span>/span>span classline> span classk>if/span> span classn>subclass/span> span classow>is/span> span classow>not/span> span classbp>None/span> span classow>and/span> span classn>subclass/span> span classow>in/span> span classn>cls/span>span classo>./span>span classn>_abc_cache/span>span classp>:/span>/span>span classline> span classk>return/span> span classbp>True/span>/span>span classline> span classn>subtype/span> span classo>/span> span classnb>type/span>span classp>(/span>span classn>instance/span>span classp>)/span>/span>span classline> span classc># Old-style instances/span>/span>span classline> span classk>if/span> span classn>subtype/span> span classow>is/span> span classn>_InstanceType/span>span classp>:/span>/span>span classline> span classn>subtype/span> span classo>/span> span classn>subclass/span>/span>span classline> span classc># chaoc: subtype will also be subclass for old style classes/span>/span>span classline> span classc># as assigned in the above step/span>/span>span classline> span classk>if/span> span classn>subtype/span> span classow>is/span> span classn>subclass/span> span classow>or/span> span classn>subclass/span> span classow>is/span> span classbp>None/span>span classp>:/span>/span>span classline> span classc># chaoc: check if the negative cache is safe to use or not/span>/span>span classline> span classk>if/span> span classp>(/span>span classn>cls/span>span classo>./span>span classn>_abc_negative_cache_version/span> span classo>/span>/span>span classline> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span> span classow>and/span>/span>span classline> span classn>subtype/span> span classow>in/span> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache/span>span classp>):/span>/span>span classline> span classk>return/span> span classbp>False/span>/span>span classline> span classc># Fall back to the subclass check./span>/span>span classline> span classk>return/span> span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subtype/span>span classp>)/span>/span>span classline> span classk>return/span> span classp>(/span>span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subclass/span>span classp>)/span> span classow>or/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subtype/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idabcmeta-subclasscheck>h3>ABCMeta.__subclasscheck__/h3>p>The code and comment in this function is very clear and straightforward./p>p>Just make sure the different cases needed to check:/p>ol classarabic simple>li>check the subclass hook/li>li>check if its a direct subclass through __mro__/li>li>check if its a subclass of a registered class (issubclass is called to dorecursive check)/li>li>check if its a subclass of a subclass (issubclass is called to do recursivecheck)/li>/ol>p>In this post, we only talk about the defitions of ABCMeta. We will see thetypical usages in the strong>collections/strong> module./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/19/python-bisect/>Python Bisect/a>/h1> p classmeta> time datetime2012-08-19T20:01:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>This module provides support for maintaining a list in sorted order withouthaving to sort the list after each insertion. It uses a basic bisectionalgorithm similar with the classic binary search./p>/div>div classsection idreview-of-binary-search>h2>Review of binary search/h2>p>According to a classreference external hrefhttp://www.amazon.com/Programming-Pearls-2nd-Edition-Bentley/dp/0201657880/refsr_1_1?ieUTF8&qid1345379618&sr8-1&keywordsprogramming+pearls>Programming Pearls/a>by Jon Bentley, Its very hard to write a correct binary search(Unbelievable, Uh?).Below is the note from the book:/p>blockquote classhighlights>Ive assigned binary search in courses at Bell Labs and IBM.Professional programmers had a couple of hours to convert its descriptioninto a program in the language of their choice; a high-level pseudocodewas fine. At the end of the speci?ed time, almost all the programmersreported that they had correct code for the task. We would then take thirtyminutes to examine their code, which the programmers did with test cases.In several classes and with over a hundred programmers, the results variedlittle: ninety percent of the programmers found bugs in their programs (andI wasnt always convinced of the correctness of the code in which no bugs werefound). I was amazed: given ample time, only about ten percent of professionalprogrammers were able to get this small program right. But they arent the onlyones to ?nd this task difficult: in the history in Section 6.2.1 of hisSorting and Searching, Knuth points out that while the first binary searchwas published in 1946, the first published binary search without bugs did notappear until 1962./blockquote>p>Understanding how to use loop invariants in composing a program is very important,so lets first implement a binary search and prove the correctness utilizing this.Here we use a simplified specification compared to the bsearch function in the Cstandard library./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>/pre>/td>td classcode>pre>code classcpp>span classline>span classkt>int/span> span classn>binsearch/span>span classp>(/span>span classkt>int/span> span classn>x/span>span classp>,/span> span classkt>int/span>span classo>*/span> span classn>A/span>span classp>,/span> span classkt>int/span> span classn>n/span>span classp>)/span>/span>span classline>span classc1>// @require 0 < n && n < length(A)/span>/span>span classline>span classc1>// @require is_sorted(A, n)/span>/span>span classline>span classcm>/* @ensures (-1 result && !is_in(x, A, n))/span>/span>span classline>span classcm> || ((0 < result && result < n) && Aresult x)/span>/span>span classline>span classcm>*//span>/span>span classline>span classp>{/span>/span>span classline> span classkt>int/span> span classn>lower/span> span classo>/span> span classmi>0/span>span classp>,/span> span classn>higher/span> span classo>/span> span classn>n/span>span classp>;/span>/span>span classline> span classkt>int/span> span classn>mid/span>span classp>;/span>/span>span classline>/span>span classline> span classk>while/span> span classp>(/span>span classn>lower/span> span classo></span> span classn>higher/span>span classp>)/span>/span>span classline> span classc1>// @loop_invariant 0 < lower && lower < higher && higher < n/span>/span>span classline> span classc1>// @loop_invariant (lower 0 || Alower - 1 < x)/span>/span>span classline> span classc1>// @loop_invariant (higher n || Ahigher > x)/span>/span>span classline> span classp>{/span>/span>span classline> span classn>mid/span> span classo>/span> span classn>lower/span> span classo>+/span> span classp>(/span>span classn>higher/span> span classo>-/span> span classn>lower/span>span classp>)/span> span classo>//span> span classmi>2/span>span classp>;/span>/span>span classline> span classc1>// @assert lower < mid && mid < higher/span>/span>span classline> span classk>if/span> span classp>(/span>span classn>A/span>span classp>/span>span classn>mid/span>span classp>/span> span classo>/span> span classn>x/span>span classp>)/span>/span>span classline> span classk>return/span> span classn>mid/span>span classp>;/span>/span>span classline> span classk>else/span> span classk>if/span> span classp>(/span>span classn>A/span>span classp>/span>span classn>mid/span>span classp>/span> span classo></span> span classn>x/span>span classp>)/span>/span>span classline> span classn>lower/span> span classo>/span> span classn>mid/span> span classo>+/span> span classmi>1/span>span classp>;/span>/span>span classline> span classk>else/span>/span>span classline> span classn>higher/span> span classo>/span> span classn>mid/span>span classp>;/span>/span>span classline> span classp>}/span>/span>span classline> span classk>return/span> span classo>-/span>span classmi>1/span>span classp>;/span>/span>span classline>span classp>}/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>Its easy to prove that the loop invariants are strong enough to imple thepostcodition of the function(@ensures). Does this function terminate? In theloop body, we have lower < higher, so lower < mid && mid < higher, then theintervals from em>lower/em> to em>mid/em> and from em>(mid+1)/em> to em>higher/em> are strictlysmaller than the original interval (lower, higher), unless we find the element,the difference between higher and lower will eventually become 0 and we willexit the loop./p>p>strong>The bisect() functions provided in this module are useful for finding theinsertion points but can be tricky or awkward to use for common searchingtasks./strong>/p>/div>div classsection idcode-comments>h2>Code comments/h2>p>The above binsearch function will return the first of the elements that equalsto the target if there are more than one. Sometimes its required to find theleft most one or the right most one. We can achieve this by using the bisect()functions. Lets examine the pre and post conditions, and also loop invariants./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>bisect_right/span>span classp>(/span>span classn>a/span>span classp>,/span> span classn>x/span>span classp>,/span> span classn>lo/span>span classo>/span>span classmi>0/span>span classp>,/span> span classn>hi/span>span classo>/span>span classbp>None/span>span classp>):/span>/span>span classline>/span>span classline> span classc># Let l be the original lo passed in, and h be hi. In order to differentiate./span>/span>span classline>/span>span classline> span classc># @requires 0 < l && l < h && h < len(a)/span>/span>span classline> span classc># @requires is_sorted(al:h)/span>/span>span classline> span classc># @ensures all e in al:result have e < x, and all e in aresult:h have e > x/span>/span>span classline>/span>span classline> span classk>while/span> span classn>lo/span> span classo></span> span classn>hi/span>span classp>:/span>/span>span classline> span classc># @loop_invariant l < lo && lo < hi && hi < h/span>/span>span classline> span classc># @loop_invariant lo l || alo - 1 < x/span>/span>span classline> span classc># @loop_invariant hi h || ahi > x/span>/span>span classline> span classn>mid/span> span classo>/span> span classp>(/span>span classn>lo/span> span classo>+/span> span classn>hi/span>span classp>)/span> span classo>///span> span classmi>2/span>/span>span classline> span classc># @assert lower < mid && mid < higher/span>/span>span classline> span classk>if/span> span classn>x/span> span classo></span> span classn>a/span>span classp>/span>span classn>mid/span>span classp>:/span>/span>span classline> span classn>hi/span> span classo>/span> span classn>mid/span>/span>span classline> span classk>else/span>span classp>:/span>/span>span classline> span classn>lo/span> span classo>/span> span classn>mid/span> span classo>+/span> span classmi>1/span>/span>span classline> span classk>return/span> span classn>lo/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>After exiting the loop, we have lo hi. Now we have to distinguish some cases:/p>ul classsimple>li>If lo l, from the third conjunct, we know that ahi > x, and since lo hi,we have alo > x. In this case, all e in al:h > x/li>li>If hi h, from the second conjunct, we know that alo - 1 < x, in this case,all e in al:h < x/li>li>if lo ! l and hi ! h, from the second and third conjuncts, we know thatalo - 1 < x, ahi > x. The post condition still holds./li>/ul>p>We can do the same analysis on the function bisect_left()./p>p>Note: In the pre condition I explicitly written down that lo < hi is required, thecode will directly return lo when hi is less than or equal to lo, but thats simplymeaningless, if this is the case, the sorted order of a after we insert elementbefore the index returned by the function./p>div classsection idabout-the-function-prototype>h3>About the function prototype/h3>p>In the doc of the module, its strong>bisect.bisect_right(a, x, lo0, hilen(a))/strong>while in the source code, its strong>def bisect_left(a, x, lo0, hiNone)/strong>/p>p>strong>bisect.bisect_right(a, x, lo0, hilen(a))/strong> is not valid python code, you willget error like this: strong>NameError: name a is not defined./strong> This is because defaultvalues are computed and bound at the function definition time rather than when youcall the function. This means that you cant have a default which is dependent onsomething that is not known until the function is called./p>/div>/div>div classsection idpythonic-stuff>h2>Pythonic stuff/h2>div classsection idoverride-function-definitions-in-python>h3>Override function definitions in Python/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>/pre>/td>td classcode>pre>code classpython>span classline>span classc># Overwrite above definitions with a fast C implementation/span>/span>span classline>span classk>try/span>span classp>:/span>/span>span classline> span classkn>from/span> span classnn>_bisect/span> span classkn>import/span> span classo>*/span>/span>span classline>span classk>except/span> span classne>ImportError/span>span classp>:/span>/span>span classline> span classk>pass/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idgotcha-mutable-default-arguments>h3>Gotcha -- Mutable default arguments/h3>p>See a classreference external hrefhttp://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument>here/a>for more details./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/18/supporting-latex-in-octopress/>Support LaTex in Octopress/a>/h1> p classmeta> time datetime2012-08-18T00:57:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>It took me some time to finally get latex math formulas working in Octopress.If you googled ‘Octopress latex’, you can get quite a few online resources abouthow to support latex in octopress, with various levels of complexity. In thispost, I will write down how I achieve this./p>h2>The initial attempt/h2>p>As I installed the a hrefhttps://github.com/xdissent/jekyll-rst>jekyll-rst/a> pluginto use rst to write my posts, I thought it should be easy to write latex mathbecause docutils has native support for it since version 0.8 (A :math: role andalso a .. math: directive introduced for that). However, after I tried to usethese in a octopress post, I found that the post will be rendered to empty. Forexample, if I insert the following rst code into my post, the whole post becomesempty; but after removing this line, everything is fine./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>/pre>/td>td classcode>pre>code class>span classline>The area of a circle is :math:`A_\text{c} (\pi/4) d^2`./span>/code>/pre>/td>/tr>/table>/div>/figure>p>I also verified that the exact same code can be successfully converted to validhtml using the ‘rst2html.py’ script on my system, so I guess maybe something iswrong in ‘RbST’. I found that in RbST, it has its own copies of rst2html andrst2latex tools under strong> /gems/RbST-0.1.3/lib/rst2parts /strong>,/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>/pre>/td>td classcode>pre>code classconsole>span classline>span classgp>chuchao@chuchao:~/.rvm/gems/ruby-1.9.2-p320/gems/RbST-0.1.3/lib/rst2parts$/span> ls/span>span classline>span classgo>__init__.py rst2html.py rst2latex.py transform.py transform.pyc/span>/span>span classline>span classgp>chuchao@chuchao:~/.rvm/gems/ruby-1.9.2-p320/gems/RbST-0.1.3/lib/rst2parts$/span> ls ../span>span classline>span classgo>rbst.rb rst2parts/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>which will be used in rbst.rb. I have even tried to change rbst.rb to use therst2html.py installed on my system, but this also didn’t get any luck./p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>/pre>/td>td classcode>pre>code classruby>span classline>span classk>class/span> span classnc>RbST/span>/span>span classline>/span>span classline> span classvc>@@executable_path/span> span classo>/span> span classno>File/span>span classo>./span>span classn>expand_path/span>span classp>(/span>span classno>File/span>span classo>./span>span classn>join/span>span classp>(/span>span classno>File/span>span classo>./span>span classn>dirname/span>span classp>(/span>span classbp>__FILE__/span>span classp>),/span> span classs2>"rst2parts"/span>span classp>))/span>/span>span classline> span classvc>@@executables/span> span classo>/span> span classp>{/span>/span>span classline> span classc1># :html > File.join(@@executable_path, "rst2html.py"),/span>/span>span classline> span classss>:html/span> span classo>>/span> span classs2>"/usr/local/bin/rst2html.py"/span>span classp>,/span>/span>span classline> span classss>:latex/span> span classo>>/span> span classno>File/span>span classo>./span>span classn>join/span>span classp>(/span>span classvc>@@executable_path/span>span classp>,/span> span classs2>"rst2latex.py"/span>span classp>)/span>/span>span classline> span classp>}/span>/span>span classline>span classo>./span>span classn>./span>span classo>./span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>Finally, I gave up on this and opened ana hrefhttps://github.com/xdissent/jekyll-rst/issues/6>issue/a> on this for the jekyll-rstplugin. Hope the author can fix this./p>h2>Switch back to markdown and using kramdown/h2>p>After a google search about this issue, seems that the simplest solution is to usekramdown, which has built-in support for latex./p>p>First, install kramdown:code>gem install karmdown/code>/p>p>Then, add mathjax configs into head>/head> tag, in octopress, just add thebelow code into code>/source/_includes/custom/head.html/code>:/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>/pre>/td>td classcode>pre>code classhtml>span classline>span classc><!-- mathjax config similar to math.stackexchange -->/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Config/span>span classp>({/span>/span>span classline> span classnx>tex2jax/span>span classo>:/span> span classp>{/span>/span>span classline> span classnx>inlineMath/span>span classo>:/span> span classp>/span> span classp>/span>span classs1>'$'/span>span classp>,/span>span classs1>'$'/span>span classp>,/span> span classp>/span>span classs2>"\\("/span>span classp>,/span>span classs2>"\\)"/span>span classp>/span> span classp>,/span>/span>span classline> span classnx>processEscapes/span>span classo>:/span> span classkc>true/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Config/span>span classp>({/span>/span>span classline> span classnx>tex2jax/span>span classo>:/span> span classp>{/span>/span>span classline> span classnx>skipTags/span>span classo>:/span> span classp>/span>span classs1>'script'/span>span classp>,/span> span classs1>'noscript'/span>span classp>,/span> span classs1>'style'/span>span classp>,/span> span classs1>'textarea'/span>span classp>,/span> span classs1>'pre'/span>span classp>,/span> span classs1>'code'/span>span classp>/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Queue/span>span classp>(/span>span classkd>function/span>span classp>()/span> span classp>{/span>/span>span classline> span classkd>var/span> span classnx>all/span> span classo>/span> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>getAllJax/span>span classp>(),/span> span classnx>i/span>span classp>;/span>/span>span classline> span classk>for/span>span classp>(/span>span classnx>i/span>span classo>/span>span classmi>0/span>span classp>;/span> span classnx>i/span> span classo></span> span classnx>all/span>span classp>./span>span classnx>length/span>span classp>;/span> span classnx>i/span> span classo>+/span> span classmi>1/span>span classp>)/span> span classp>{/span>/span>span classline> span classnx>all/span>span classp>/span>span classnx>i/span>span classp>./span>span classnx>SourceElement/span>span classp>()./span>span classnx>parentNode/span>span classp>./span>span classnx>className/span> span classo>+/span> span classs1>' has-jax'/span>span classp>;/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/javascript"/span>/span>span classline> span classna>src/span>span classs>"http://cdn.mathjax.org/mathjax/latest/MathJax.js?configTeX-AMS-MML_HTMLorMML"/span>span classnt>>/span>/span>span classline>span classnt></script>/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>See a hrefhttp://kramdown.rubyforge.org/syntax.html#math-blocks>here/a> for more details.After this, we are ready to test latex math in our post. For example:/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classlatex>span classline>span classsb>$$/span>span classnb>/span>/span>span classline>span classnv>\begin/span>span classnb>{align/span>span classo>*/span>span classnb>}/span>/span>span classline>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>x,y/span>span classo>)/span>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\phi/span>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnv>\sum/span>span classnb>_{i/span>span classo>/span>span classm>1/span>span classnb>}^n x_ie_i, /span>span classnv>\sum/span>span classnb>_{j/span>span classo>/span>span classm>1/span>span classnb>}^n y_je_j /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\sum/span>span classnb>_{i/span>span classo>/span>span classm>1/span>span classnb>}^n /span>span classnv>\sum/span>span classnb>_{j/span>span classo>/span>span classm>1/span>span classnb>}^n x_i y_j /span>span classnv>\phi/span>span classo>(/span>span classnb>e_i, e_j/span>span classo>)/span>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> & /span>span classo>(/span>span classnb>x_/span>span classm>1/span>span classnb>, /span>span classnv>\ldots/span>span classnb>, x_n/span>span classo>)/span>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnb> /span>span classnv>\begin/span>span classnb>{array}{ccc}/span>/span>span classline>span classnb> /span>span classnv>\phi/span>span classo>(/span>span classnb>e_/span>span classm>1/span>span classnb>, e_/span>span classm>1/span>span classo>)/span>span classnb> & /span>span classnv>\cdots/span>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>e_/span>span classm>1/span>span classnb>, e_n/span>span classo>)/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\vdots/span>span classnb> & /span>span classnv>\ddots/span>span classnb> & /span>span classnv>\vdots/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\phi/span>span classo>(/span>span classnb>e_n, e_/span>span classm>1/span>span classo>)/span>span classnb> & /span>span classnv>\cdots/span>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>e_n, e_n/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\end/span>span classnb>{array} /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnb> /span>span classnv>\begin/span>span classnb>{array}{c}/span>/span>span classline>span classnb> y_/span>span classm>1/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\vdots/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> y_n/span>/span>span classline>span classnb> /span>span classnv>\end/span>span classnb>{array} /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnv>\end/span>span classnb>{align/span>span classo>*/span>span classnb>}/span>/span>span classline>span classs>$$/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>will render as/p>p>$$\begin{alignem>} & \phi(x,y) \phi \left(\sumem>{i1}^n x_ie_i, \sum/em>{j1}^n y_je_j \right) \sumem>{i1}^n \sum/em>{j1}^n x_i y_j \phi(e_i, e_j) \ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \ \vdots & \ddots & \vdots \ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \ \vdots \ y_n \end{array} \right)\end{align/em>}$$/p>p>And for inline latex code, just use code>$\exp(-\frac{x^2}{2})$/code>, which will give$\exp(-\frac{xsup>2/sup>}{2})$./p>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/14/python-heapq/>Python Heapq/a>/h1> p classmeta> time datetime2012-08-14T22:26:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>The module provides an implementation of heap queue algorithm, also known aspriority queue algorithm./p>/div>div classsection idhighlights>h2>Highlights/h2>ul classsimple>li>Zero-based indexing is used, so the childrens index of node with index kare (2*k + 1) and (2*k + 2) respectively./li>li>Internally a min heap is maintained rather than max heap, which is moregenerally used in algorithm textbooks./li>li>Three general functions based on heaps are also provided:/li>/ul>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>/pre>/td>td classcode>pre>code classpython>span classline>span classc># Merge multiple sorted inputs into a single sorted output/span>/span>span classline>span classc># (for example, merge timestamped entries from multiple log files)/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>merge/span>span classp>(/span>span classo>*/span>span classn>iterables/span>span classp>)/span>/span>span classline>/span>span classline>span classc># The following two functions are effectively like/span>/span>span classline>span classc># sorted(iterable, keykey, reverseTrue):n and/span>/span>span classline>span classc># sorted(iterable, keykey):n,/span>/span>span classline>span classc># but they perform best with smaller values of n/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>nlargest/span>span classp>(/span>span classn>n/span>span classp>,/span> span classn>iterable/span>span classp>,/span> span classn>key/span>span classp>)/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>nsmallest/span>span classp>(/span>span classn>n/span>span classp>,/span> span classn>iterable/span>span classp>,/span> span classn>key/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idpythonic-stuff>h2>Pythonic stuff/h2>div classsection idrich-comparison-methods>h3>Rich comparison methods/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>cmp_lt/span>span classp>(/span>span classn>x/span>span classp>,/span> span classn>y/span>span classp>):/span>/span>span classline> span classc># use __lt__ if available; otherwise, try __le__/span>/span>span classline> span classk>return/span> span classn>x/span> span classo></span> span classn>y/span> span classk>if/span> span classnb>hasattr/span>span classp>(/span>span classn>x/span>span classp>,/span> span classs>'__lt__'/span>span classp>)/span> span classk>else/span> span classp>(/span>span classow>not/span> span classn>y/span> span classo></span> span classn>x/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>In python, there are 6 so called "Rich Comparison" methods, x < y callsx.__lt__(y) and others are similar (__le__ and <; __gt__ and >; __eq__ and ;__ne__ and <>). Arguments to rich comparison methods are never coerced. seea classreference external hrefhttp://docs.python.org/glossary.html#term-coercion>coercion/a>/p>/div>/div>div classsection idcode-comments>h2>Code comments/h2>div classsection idwhy-heapify-x-is-o-n>h3>Why heapify(x) is O(n)?/h3>p>This is not obvious at first by seeing the code, given that there is a whileloop in _siftup and also a while loop in _siftdown(called in _siftup). Letslook into it further:/p>ol classarabic simple>li>in the while loop of _siftup, it takes O(L) time for nodes that L levelsabove leaves./li>li>and in the while loop of _siftdown called in _siftup, it takes at most Lsteps, so _siftdown is O(L)./li>li>since we have n/4 nodes in level 1, n/8 nodes in level 2, and finally oneroot node, which is lg(n) levels above leaf, so the total amount in the whileloop of heapify is:/li>/ol>div classline-block>div classline>strong>n/4 * c + n/8 * c + n/16 * 3c + ... + 1 * lg(n) * c/strong>, and let n/4 2^k,after simplification, we get:/div>div classline>strong>c * 2^k(1/2^0 + 2/2^1 + 3/2^2 + ... + (k+1)/2^k)/strong>, as the limit ofstrong>(k+1)/2^k/strong> is 0 when k is infinite, so the term in the brackets bound toa constant, from this we can conclude that heapify is O(2^k), which is O(n)./div>div classline>br />/div>/div>/div>div classsection idwhy-it-continues-to-find-the-smaller-child-until-a-leaf-is-hit-in-siftup>h3>Why it continues to find the smaller child until a leaf is hit in _siftup?/h3>p>As explained in the comment by the module author, this is a ad hoc to reducethe comparisons on the following operations on the heap./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/14/intro-on-reading-source-of-python-standard-libraries/>Introduction on Reading Source of Python Standard Libraries Series/a>/h1> p classmeta> time datetime2012-08-14T21:11:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>I am going to start the series of posts on reading the source of python standardmodules. I will go with the pure python modules first, and maybe later I cancontinue with C implementations of the modules. Lets see how far I could go./p>div classsection idwhat-will-be-included>h2>What will be included/h2>ul classsimple>li>A brief introduction of the module. (It should be very short, people can go tothe standard library doc for more information.)/li>li>Special highlights about the important APIs, implementation details./li>li>Python features/idioms/tricks/gotchas that worth the whistle, especially thoseI was not familiar with/li>li>Detail explanations about the tricky part of the code if any/li>/ul>/div>div classsection idwhat-will-not-be-included>h2>What will not be included/h2>ul classsimple>li>The example usage of the various APIs, for this kind of stuff,a classreference external hrefhttp://www.doughellmann.com/PyMOTW/>Python module of the week/a> is a betterplace to go/li>/ul>p>Also, alone the way, I may start another series on some specific advanced topicsin python, like strong>descriptor/strong>, strong>decorator/strong>, strong>method resolution order(mro)/strong>and so on. Mainly about why they are introduced into python, how they are used andthe typical use cases. This is inspired by the blogs abouta classreference external hrefhttp://python-history.blogspot.com/>python history/a>/p>p>This post will also be used to track my progress./p>/div>/div> /article> div classpagination> a classprev href2>← Older/a> a href/blog/archives>Blog Archives/a> /div>/div>aside classsidebar> section> h1>Categories/h1> ul idcategories> li classcategory>a href/blog/categories/coursera/>coursera (1)/a>/li>li classcategory>a href/blog/categories/octopress/>octopress (3)/a>/li>li classcategory>a href/blog/categories/python/>python (4)/a>/li>li classcategory>a href/blog/categories/scala/>scala (1)/a>/li>li classcategory>a href/blog/categories/sicp/>sicp (3)/a>/li> /ul>/section>section> h1>Recent Posts/h1> ul idrecent_posts> li classpost> a href/blog/2015/09/07/scala-cake-pattern/>Scala Cake Pattern/a> /li> li classpost> a href/blog/2013/06/27/sicp-section-1-3/>SICP Section 1.3/a> /li> li classpost> a href/blog/2013/06/14/sicp-section-1-2/>SICP Section 1.2/a> /li> li classpost> a href/blog/2013/05/14/sicp-section-1-1/>SICP Section 1.1/a> /li> li classpost> a href/blog/2013/01/06/coursera-online-functional-programming-course-review/>Coursera online functional programming course - a retrospective/a> /li> /ul>/section>section> h1>Recent Comments/h1> div iddsq-recentcomments classdsq-widget> script typetext/javascript srchttp://disqus.com/forums/chaoc/recent_comments_widget.js?hide_avatars1> /script> /div>/section>section> h2>Reading List/h2> div> script typetext/javascript srchttp://www.douban.com/service/badge/3607474/?showdolist&n6&columns3&hidelogoyes&catbook > /script> /div>/section>section> h1>Tags/h1> ul classtag-cloud> a stylefont-size: 185% href/blog/tags/chapter-1/>Chapter 1/a>a stylefont-size: 210% href/blog/tags/sicp/>SICP/a>a stylefont-size: 150% href/blog/tags/scala/>Scala/a>a stylefont-size: 90% href/blog/tags/blog/>blog/a>a stylefont-size: 90% href/blog/tags/github/>github/a>a stylefont-size: 90% href/blog/tags/heap/>heap/a>a stylefont-size: 90% href/blog/tags/latex/>latex/a>a stylefont-size: 185% href/blog/tags/octopress/>octopress/a>a stylefont-size: 90% href/blog/tags/priority-queue/>priority queue/a>a stylefont-size: 210% href/blog/tags/python/>python/a> /ul>/section> /aside> /div> /div> footer rolecontentinfo>p> Copyright © 2015 - Chao Chu - span classcredit>Powered by a hrefhttp://octopress.org>Octopress/a>/span>/p>/footer> script typetext/javascript> var disqus_shortname chaoc; var disqus_script count.js; (function () { var dsq document.createElement(script); dsq.type text/javascript; dsq.async true; dsq.src http:// + disqus_shortname + .disqus.com/ + disqus_script; (document.getElementsByTagName(head)0 || document.getElementsByTagName(body)0).appendChild(dsq); }());/script>/body>/html>
Port 443
HTTP/1.1 200 OKConnection: keep-aliveContent-Length: 240560Server: GitHub.comContent-Type: text/html; charsetutf-8permissions-policy: interest-cohort()Last-Modified: Thu, 15 Oct 2015 09:04:36 GMTAccess-Control-Allow-Origin: *ETag: 561f6c24-3abb0expires: Fri, 13 Sep 2024 12:15:12 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: B2F4:3BD031:38C3881:3A30005:66E42A77Accept-Ranges: bytesAge: 0Date: Fri, 13 Sep 2024 12:05:12 GMTVia: 1.1 varnishX-Served-By: cache-bfi-kbfi7400031-BFIX-Cache: MISSX-Cache-Hits: 0X-Timer: S1726229112.177483,VS0,VE96Vary: Accept-EncodingX-Fastly-Request-ID: 5ef70c10bb9338ab9c9d062fbf87c564ff496152 !DOCTYPE html>!--if IEMobile 7 >html classno-js iem7>!endif-->!--if lt IE 9>html classno-js lte-ie8>!endif-->!--if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)>!-->html classno-js langen>!--!endif-->head> meta charsetutf-8> title>Chaos Random Thoughts/title> meta nameauthor contentChao Chu> meta namedescription contentThe summary of my thoughts on the Scala Cake Pattern. Referenceshttp://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/http:// …> !-- http://t.co/dKP3o1e --> meta nameHandheldFriendly contentTrue> meta nameMobileOptimized content320> meta nameviewport contentwidthdevice-width, initial-scale1> link relcanonical hrefhttp://chuchao333.github.io/> link href/favicon.ico relicon> link href/stylesheets/screen.css mediascreen, projection relstylesheet typetext/css> script src/javascripts/modernizr-2.0.js>/script> script src/javascripts/ender.js>/script> script src/javascripts/octopress.js typetext/javascript>/script> link href/atom.xml relalternate titleChaos Random Thoughts typeapplication/atom+xml> !--Fonts from Googles Web font directory at http://google.com/webfonts -->link hrefhttp://fonts.googleapis.com/css?familyPT+Serif:regular,italic,bold,bolditalic relstylesheet typetext/css>link hrefhttp://fonts.googleapis.com/css?familyPT+Sans:regular,italic,bold,bolditalic relstylesheet typetext/css>link hrefhttp://fonts.googleapis.com/css?familyLato:400,700,400italic,700italic relstylesheet typetext/css>!-- mathjax config similar to math.stackexchange -->script typetext/x-mathjax-config> MathJax.Hub.Config({ tex2jax: { inlineMath: $,$, \\(,\\) , processEscapes: true } });/script>script typetext/x-mathjax-config> MathJax.Hub.Config({ tex2jax: { skipTags: script, noscript, style, textarea, pre, code } });/script>script typetext/x-mathjax-config> MathJax.Hub.Queue(function() { var all MathJax.Hub.getAllJax(), i; for(i0; i all.length; i + 1) { alli.SourceElement().parentNode.className + has-jax; } });/script>script typetext/javascript srchttp://cdn.mathjax.org/mathjax/latest/MathJax.js?configTeX-AMS-MML_HTMLorMML>/script> /head>body > header rolebanner>hgroup> h1>a href/>Chaos Random Thoughts/a>/h1> h2>Keep looking, dont settle/h2> /hgroup>/header> nav rolenavigation>ul classsubscription data-subscriptionrss> li>a href/atom.xml relsubscribe-rss titlesubscribe via RSS>RSS/a>/li> /ul> form actionhttp://google.com/search methodget> fieldset rolesearch> input typehidden nameq valuesite:chuchao333.github.io /> input classsearch typetext nameq results0 placeholderSearch/> /fieldset>/form> ul classmain-navigation> li>a href/>Blog/a>/li> li>a href/blog/archives>Archives/a>/li> li>a href/notes>Notes/a>/li> li>a href/about>About/a>/li>/ul>/nav> div idmain> div idcontent> div classblog-index> article> header> h1 classentry-title>a href/blog/2015/09/07/scala-cake-pattern/>Scala Cake Pattern/a>/h1> p classmeta> time datetime2015-09-07T18:39:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>The summary of my thoughts on the Scala Cake Pattern./p>div classsection idreferences>h2>References/h2>p>a classreference external hrefhttp://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/>http://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di//a>/p>p>a classreference external hrefhttp://www.warski.org/blog/2010/12/di-in-scala-cake-pattern/>http://www.warski.org/blog/2010/12/di-in-scala-cake-pattern//a>/p>p>a classreference external hrefhttps://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers>https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers/a>/p>p>a classreference external hrefhttp://scalatutorials.com/code/2013/07/09/scala-cake-pattern/>http://scalatutorials.com/code/2013/07/09/scala-cake-pattern//a>/p>p>a classreference external hrefhttps://groups.google.com/forum/#!msg/scala-user/DC2vUuCZmI0/RO3JYoKnj20Jcstdi>https://groups.google.com/forum/#!msg/scala-user/DC2vUuCZmI0/RO3JYoKnj20Jcstdi/a>/p>p>a classreference external hrefhttps://www.reddit.com/r/haskell/comments/1629ld/olegs_go_at_reproducing_scalas_cake_pattern/>https://www.reddit.com/r/haskell/comments/1629ld/olegs_go_at_reproducing_scalas_cake_pattern//a>/p>p>a classreference external hrefhttp://blog.originate.com/blog/2013/10/21/reader-monad-for-dependency-injection/>http://blog.originate.com/blog/2013/10/21/reader-monad-for-dependency-injection//a>/p>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/06/27/sicp-section-1-3/>SICP Section 1.3/a>/h1> p classmeta> time datetime2013-06-27T01:06:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idprocedures-as-arguments>h2>Procedures as Arguments/h2>p>Why high order procedures is useful?/p>blockquote classhighlights>Often the same programming pattern will be used with a number of differentprocedures. To express such patterns as concepts, we will need to constructprocedures that can accept procedures as arguments or return procedures asvalues. Procedures that manipulate procedures are called high-orderprocedures, they can serve as powerful abstraction mechanisms, vastlyincreaseing the expressive power of our language./blockquote>/div>div classsection idlambda>h2>Lambda/h2>ul classsimple>li>Using lambda to create anonymous functions:ul>li>strong>(define (plus4 x) (+ x 4))/strong> is em>equivalent to/em> strong>(define plus4 (lambda (x) (+ x 4)))/strong>/li>/ul>/li>li>Using lambda(let) to create local variables/li>/ul>blockquote classhighlights>Sometimes we can use internal definitions to get the same effect as with let./blockquote>p>And in which cases we couldnt get the same effect?/p>/div>div classsection idabstractions-and-first-class-procedures>h2>Abstractions and first-class procedures/h2>blockquote classhighlights>As programmers, we should be alert to oppotunities to identify the underlyingabstractions in our programs and to build upon then and generalize them tocreate more powerful abstractions. This is not to say one should always writeprograms in the most abstract way possible; expert programmers know how tochoose the level of abstraction appropriate to their task. But its importantto be able to think in terms of these abstractions, so that we can be readyto apply them in new contexts./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.29/strong>Answer:/p>p>This is not very hard, just simply translate the simpson rule definition to code:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>simpson-rule/span> span classnv>f/span> span classnv>a/span> span classnv>b/span> span classnv>n/span>span classp>)/span>/span>span classline> span classc1>; still use 'define' since we haven't learned 'let' till now/span>/span>span classline> span classp>(/span>span classk>define /span>span classnv>h/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classnv>b/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>))/span>/span>span classline> span classc1>; the procedure to compute 'yk', the helper method used by 'term'/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>y/span> span classnv>k/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnb>* /span>span classnv>k/span> span classnv>h/span>span classp>))))/span>/span>span classline> span classc1>; get the 'next and 'term for the sum procedure/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>next/span> span classnv>k/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>k/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>term/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classk>cond /span>span classp>((/span>span classk>or /span>span classp>(/span>span classnb> /span>span classnv>k/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb> /span>span classnv>k/span> span classnv>n/span>span classp>))/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>k/span>span classp>)/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>odd? /span>span classnv>k/span>span classp>)/span> span classmi>4/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>y/span> span classnv>k/span>span classp>)))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>* /span>span classnv>h/span> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classmi>0/span> span classnv>next/span> span classnv>n/span>span classp>))/span> span classmi>3/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>integral/span> span classnv>f/span> span classnv>a/span> span classnv>b/span> span classnv>dx/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>add-dx/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>sum/span> span classnv>f/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnb>/ /span>span classnv>dx/span> span classmf>2.0/span>span classp>))/span> span classnv>add-dx/span> span classnv>b/span>span classp>)/span> span classnv>dx/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>simpson-rule/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>100.0/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>simpson-rule/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>1000.0/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>integral/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>0.01/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>integral/span> span classnv>cube/span> span classmi>0/span> span classmi>1/span> span classmf>0.001/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; the output:/span>/span>span classline>span classc1>; 0.24999998999999987/span>/span>span classline>span classc1>; 0.24999999999900027/span>/span>span classline>span classc1>; 0.24998750000000042/span>/span>span classline>span classc1>; 0.249999875000001/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.30/strong>Answer:/p>p>Put both the recursive and iterative versions here to compare:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-iter/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>a/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>10/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>They produce the same results as expected./p>p>strong>1.31/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classmi>1/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product-iter/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>cur/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>cur/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>cur/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>term/span> span classnv>cur/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>factorial/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>identity/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product/span> span classnv>identity/span> span classmi>1/span> span classnv>inc/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>factorial/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>factorial/span> span classmi>10/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; compute the approximations to PI using the formula:/span>/span>span classline>span classc1>;; PI 2*4*4*6*6*8.../span>/span>span classline>span classc1>;; -- --------------/span>/span>span classline>span classc1>;; 4 3*3*5*5*7*7.../span>/span>span classline>/span>span classline>span classc1>;; here, term is (2n/(2n + 1) * 2(n+1) /(2n + 1)), n 1, 2, 3, .../span>/span>span classline>span classp>(/span>span classnf>//span>/span>span classline> span classp>(/span>span classnf>product-iter/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classmi>2/span> span classp>(/span>span classnb>+ /span>span classnv>n/span> span classmf>1.0/span>span classp>))))/span>/span>span classline> span classmi>1/span>/span>span classline> span classnv>inc/span>/span>span classline> span classmi>50/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>product-iter/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classmf>1.0/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>n/span>span classp>)/span> span classmf>1.0/span>span classp>)))/span>/span>span classline> span classmi>1/span>/span>span classline> span classnv>inc/span>/span>span classline> span classmi>50/span>span classp>)/span>/span>span classline>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>There might be better ways to translate the formula. The solution above theis not veru accurate and if the upper bound is too large (say 100), it willyield to nan+./p>p>strong>1.32/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>null-value/span>/span>span classline> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>accumulate-iter/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>cur/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>cur/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnf>next/span> span classnv>cur/span>span classp>)/span> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>cur/span>span classp>)/span> span classnv>result/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>a/span> span classnv>null-value/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classc1>; (accumulate + 0 term a next b))/span>/span>span classline> span classp>(/span>span classnf>accumulate-iter/span> span classnv>+/span> span classmi>0/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>product/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>)/span>/span>span classline> span classc1>; (accumulate * 1 term a next b))/span>/span>span classline> span classp>(/span>span classnf>accumulate-iter/span> span classnv>*/span> span classmi>1/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classnv>x/span>span classp>)/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>sum/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>product/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span> span classmi>1/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.33/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classnv>a/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>null-value/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>filter/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>combiner/span> span classp>(/span>span classnf>term/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>filtered-accumulate/span> span classnv>combiner/span> span classnv>null-value/span> span classnv>term/span> span classp>(/span>span classnf>next/span> span classnv>a/span>span classp>)/span> span classnv>next/span> span classnv>b/span> span classnv>filter/span>span classp>))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>prime?/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classnv>n/span> span classp>(/span>span classnf>smallest-divisor/span> span classnv>n/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>smallest-divisor/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classnv>test-divisor/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb>> /span>span classp>(/span>span classnf>square/span> span classnv>test-divisor/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>divides?/span> span classnv>test-divisor/span> span classnv>n/span>span classp>)/span> span classnv>test-divisor/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>find-divisor/span> span classnv>n/span> span classp>(/span>span classnb>+ /span>span classnv>test-divisor/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>divides?/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classnv>b/span> span classnv>a/span>span classp>)/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>identity/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; return a procedure Integer -> Boolean/span>/span>span classline>span classc1>; that check if the given integer is relative prime with n/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>relative-prime?/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>gcd /span>span classnv>n/span> span classnv>a/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classnv>f/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>gcd /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>a/span>/span>span classline> span classp>(/span>span classnb>gcd /span>span classnv>b/span> span classp>(/span>span classnb>remainder /span>span classnv>a/span> span classnv>b/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>+/span> span classmi>0/span> span classnv>square/span> span classmi>2/span> span classnv>inc/span> span classmi>10/span> span classnv>prime?/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>filtered-accumulate/span> span classnv>*/span> span classmi>1/span> span classnv>identity/span> span classmi>1/span> span classnv>inc/span> span classmi>10/span> span classp>(/span>span classnf>relative-prime?/span> span classmi>10/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.34/strong>Answer:/p>p>Apply (f f) with get (f 2), while tring to apply (f 2), error will be issuedsince a procedure is expected but an integer parameter 2 is given./p>p>strong>1.35/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; since the golden-ratio x satisfies that x^2 x + 1/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>golden-ratio/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classmi>1/span> span classp>(/span>span classnb>/ /span>span classmi>1/span> span classnv>x/span>span classp>)))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>golden-ratio/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.36/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>span classline-number>48/span>span classline-number>49/span>span classline-number>50/span>span classline-number>51/span>span classline-number>52/span>span classline-number>53/span>span classline-number>54/span>span classline-number>55/span>span classline-number>56/span>span classline-number>57/span>span classline-number>58/span>span classline-number>59/span>span classline-number>60/span>span classline-number>61/span>span classline-number>62/span>span classline-number>63/span>span classline-number>64/span>span classline-number>65/span>span classline-number>66/span>span classline-number>67/span>span classline-number>68/span>span classline-number>69/span>span classline-number>70/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>display /span>span classs>"current guess is: "/span> span classp>)/span>/span>span classline> span classp>(/span>span classnb>display /span>span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>newline/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; without average damping/span>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classmi>1000/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classnv>x/span>span classp>)))/span> span classmf>2.0/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; output below:/span>/span>span classline>span classc1>; current guess is: 2.0/span>/span>span classline>span classc1>; current guess is: 9.965784284662087/span>/span>span classline>span classc1>; current guess is: 3.004472209841214/span>/span>span classline>span classc1>; current guess is: 6.279195757507157/span>/span>span classline>span classc1>; current guess is: 3.759850702401539/span>/span>span classline>span classc1>; current guess is: 5.215843784925895/span>/span>span classline>span classc1>; current guess is: 4.182207192401397/span>/span>span classline>span classc1>; current guess is: 4.8277650983445906/span>/span>span classline>span classc1>; current guess is: 4.387593384662677/span>/span>span classline>span classc1>; current guess is: 4.671250085763899/span>/span>span classline>span classc1>; current guess is: 4.481403616895052/span>/span>span classline>span classc1>; current guess is: 4.6053657460929/span>/span>span classline>span classc1>; current guess is: 4.5230849678718865/span>/span>span classline>span classc1>; current guess is: 4.577114682047341/span>/span>span classline>span classc1>; current guess is: 4.541382480151454/span>/span>span classline>span classc1>; current guess is: 4.564903245230833/span>/span>span classline>span classc1>; current guess is: 4.549372679303342/span>/span>span classline>span classc1>; current guess is: 4.559606491913287/span>/span>span classline>span classc1>; current guess is: 4.552853875788271/span>/span>span classline>span classc1>; current guess is: 4.557305529748263/span>/span>span classline>span classc1>; current guess is: 4.554369064436181/span>/span>span classline>span classc1>; current guess is: 4.556305311532999/span>/span>span classline>span classc1>; current guess is: 4.555028263573554/span>/span>span classline>span classc1>; current guess is: 4.555870396702851/span>/span>span classline>span classc1>; current guess is: 4.555315001192079/span>/span>span classline>span classc1>; current guess is: 4.5556812635433275/span>/span>span classline>span classc1>; current guess is: 4.555439715736846/span>/span>span classline>span classc1>; current guess is: 4.555599009998291/span>/span>span classline>span classc1>; current guess is: 4.555493957531389/span>/span>span classline>span classc1>; current guess is: 4.555563237292884/span>/span>span classline>span classc1>; current guess is: 4.555517548417651/span>/span>span classline>span classc1>; current guess is: 4.555547679306398/span>/span>span classline>span classc1>; current guess is: 4.555527808516254/span>/span>span classline>span classc1>; current guess is: 4.555540912917957/span>/span>span classline>span classc1>; 4.555532270803653/span>/span>span classline>/span>span classline>span classc1>; with average damping/span>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classmi>1000/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classnv>x/span>span classp>)))/span> span classmi>2/span>span classp>))/span> span classmf>2.0/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; output below:/span>/span>span classline>span classc1>; current guess is: 2.0/span>/span>span classline>span classc1>; current guess is: 5.9828921423310435/span>/span>span classline>span classc1>; current guess is: 4.922168721308343/span>/span>span classline>span classc1>; current guess is: 4.628224318195455/span>/span>span classline>span classc1>; current guess is: 4.568346513136242/span>/span>span classline>span classc1>; current guess is: 4.5577305909237005/span>/span>span classline>span classc1>; current guess is: 4.555909809045131/span>/span>span classline>span classc1>; current guess is: 4.555599411610624/span>/span>span classline>span classc1>; current guess is: 4.5555465521473675/span>/span>span classline>span classc1>; 4.555537551999825/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.37/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; k-term finite continued fraction/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>frac/span> span classnv>i/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnf>frac/span> span classp>(/span>span classnb>+ /span>span classnv>i/span> span classmi>1/span>span classp>))))))/span>/span>span classline> span classp>(/span>span classnf>frac/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac-iter/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; k 10 produce 0.6179775280898876/span>/span>span classline>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>cont-frac-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; k 11 produce 0.6180555555555556/span>/span>span classline>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>11/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>cont-frac-iter/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classmi>11/span>span classp>)/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; TODO: implement a procedure to retry different k until the first/span>/span>span classline>span classc1>; one that produce the value accurate to 4 decimal./span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.38/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; if i % 3 2, (d i) 2 * ((i + 1) / 3)/span>/span>span classline>span classc1>; else (d i) 1/span>/span>span classline>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>r/span> span classp>(/span>span classnb>remainder /span>span classnv>i/span> span classmi>3/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>r/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classmf>2.0/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classmi>3/span>span classp>))/span>/span>span classline> span classmf>1.0/span>span classp>)))/span>/span>span classline> span classmi>10/span>span classp>)/span>/span>span classline> span classmi>2/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.39/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; if i 1, (n i) -x else (n i) -x^2/span>/span>span classline>span classc1>; (d i) 2 * i - 1/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>tan-cf/span> span classnv>x/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>cont-frac/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>x/span>/span>span classline> span classp>(/span>span classnb>- /span>span classmi>0/span>span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>i/span>span classp>)/span> span classp>(/span>span classnb>- /span>span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>i/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classnv>k/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cont-frac/span> span classnv>n/span> span classnv>d/span> span classnv>k/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iter/span> span classnv>i/span> span classnv>result/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>i/span> span classmi>0/span>span classp>)/span>/span>span classline> span classnv>result/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classp>(/span>span classnb>- /span>span classnv>i/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>n/span> span classnv>i/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>d/span> span classnv>i/span>span classp>)/span> span classnv>result/span>span classp>)))))/span>/span>span classline> span classp>(/span>span classnf>iter/span> span classnv>k/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; tan (pi / 8)/span>/span>span classline>span classp>(/span>span classnf>tan-cf/span> span classmf>0.4/span> span classmi>10/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; tan (pi / 4)/span>/span>span classline>span classp>(/span>span classnf>tan-cf/span> span classmf>0.7853981633974483/span> span classmi>10/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.40/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>span classline-number>42/span>span classline-number>43/span>span classline-number>44/span>span classline-number>45/span>span classline-number>46/span>span classline-number>47/span>span classline-number>48/span>span classline-number>49/span>span classline-number>50/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average-damp/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>a/span> span classnv>b/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>x/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classc1>;; re-write the square-root procedure/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>sqrt /span>span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>average-damp/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>)))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classc1>;; cube root, similar with above/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube-root/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>average-damp/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnf>square/span> span classnv>y/span>span classp>))))/span> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classnv>dx/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>deriv/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>g/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>))/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))/span> span classnv>dx/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cube/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>newton-transform/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>- /span>span classnv>x/span> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>)/span> span classp>((/span>span classnf>deriv/span> span classnv>g/span>span classp>)/span> span classnv>x/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>newton-method/span> span classnv>g/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span> span classp>(/span>span classnf>newton-transform/span> span classnv>g/span>span classp>)/span> span classnv>guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cubic/span> span classnv>a/span> span classnv>b/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>))/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>x/span>span classp>)/span> span classnv>c/span>span classp>)))/span>/span>span classline>/span>span classline>span classc1>; zero of x^3 + x^2 + x + 1/span>/span>span classline>span classc1>; should be -1/span>/span>span classline>span classp>(/span>span classnf>newton-method/span> span classp>(/span>span classnf>cubic/span> span classmi>1/span> span classmi>1/span> span classmi>1/span>span classp>)/span> span classmf>1.0/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.41/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>;; Note: it's a little confusing at first, 'double' is not apply the function/span>/span>span classline>span classc1>;; 'f' and double the result, it's 'DOUBLE' the application of the function/span>/span>span classline>span classc1>;; 'f'./span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>((/span>span classnf>double/span> span classnv>inc/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline>span classp>(((/span>span classnf>double/span> span classnv>double/span>span classp>)/span> span classnv>inc/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>; this will get 21/span>/span>span classline>span classp>(((/span>span classnf>double/span> span classp>(/span>span classnf>double/span> span classnv>double/span>span classp>))/span> span classnv>inc/span>span classp>)/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.42/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>((/span>span classnf>compose/span> span classnv>square/span> span classnv>inc/span>span classp>)/span> span classmi>6/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.43/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>inc/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>((/span>span classnf>repeated/span> span classnv>square/span> span classmi>2/span>span classp>)/span> span classmi>5/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.44/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>n-fold-smooth/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>repeated/span> span classp>(/span>span classnf>smooth/span> span classnv>f/span>span classp>)/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>smooth/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>dx/span> span classmf>0.0001/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>dx/span>span classp>))/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>dx/span>span classp>)))/span> span classmi>3/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>((/span>span classnf>n-fold-smooth/span> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classmf>1.0/span> span classnv>x/span>span classp>))/span> span classmi>3/span>span classp>)/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>((/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classmf>1.0/span> span classnv>x/span>span classp>))/span> span classmi>6/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.45/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>span classline-number>39/span>span classline-number>40/span>span classline-number>41/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classc1>;; from the experiments, the nth root requires at least log2(n) average damps/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>nth-root/span> span classnv>x/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fixed-point/span>/span>span classline> span classp>((/span>span classnf>repeated/span> span classnv>average-damp/span> span classp>(/span>span classnb>floor /span>span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>log /span>span classnv>n/span>span classp>)/span> span classp>(/span>span classnb>log /span>span classmi>2/span>span classp>))))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnb>expt /span>span classnv>y/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough?/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>1/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next/span> span classp>(/span>span classnf>f/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classc1>; (display next)/span>/span>span classline> span classc1>; (newline)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>close-enough?/span> span classnv>next/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classnv>next/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next/span>span classp>))))/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average-damp/span> span classnv>f/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>x/span> span classp>(/span>span classnf>f/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span>/span>span classline> span classnv>f/span>/span>span classline> span classp>(/span>span classnf>compose/span> span classnv>f/span> span classp>(/span>span classnf>repeated/span> span classnv>f/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>compose/span> span classnv>f/span> span classnv>g/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>x/span>span classp>)/span> span classp>(/span>span classnf>f/span> span classp>(/span>span classnf>g/span> span classnv>x/span>span classp>))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>16/span> span classmi>4/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>32/span> span classmi>5/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>64/span> span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>128/span> span classmi>7/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>256/span> span classmi>8/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>nth-root/span> span classmi>10000000000000000000000000000000000000000000000000000000000000000/span> span classmi>64/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.46/strong>Answer:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classnv>tolerance/span> span classmf>0.00001/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>iterative-improve/span> span classnv>enough?/span> span classnv>improve/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try/span> span classnv>guess/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>let /span>span classp>((/span>span classnf>next-guess/span> span classp>(/span>span classnf>improve/span> span classnv>guess/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>enough?/span> span classnv>guess/span> span classnv>next-guess/span>span classp>)/span>/span>span classline> span classnv>guess/span>/span>span classline> span classp>(/span>span classnf>try/span> span classnv>next-guess/span>span classp>))))/span>/span>span classline> span classnv>try/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fixed-point/span> span classnv>f/span> span classnv>first-guess/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>iterative-improve/span> span classnv>close-enough?/span> span classnv>f/span>span classp>)/span> span classnv>first-guess/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>sqrt /span>span classnv>x/span>span classp>)/span>/span>span classline> span classp>((/span>span classnf>iterative-improve/span>/span>span classline> span classnv>close-enough?/span>/span>span classline> span classp>(/span>span classk>lambda /span>span classp>(/span>span classnf>y/span>span classp>)/span> span classp>(/span>span classnf>average/span> span classnv>y/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classnv>y/span>span classp>))))/span>/span>span classline> span classmf>1.0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>average/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>close-enough?/span> span classnv>x/span> span classnv>y/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>- /span>span classnv>x/span> span classnv>y/span>span classp>)/span> span classnv>y/span>span classp>))/span> span classnv>tolerance/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>4/span>span classp>)/span>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>6/span>span classp>)/span>/span>span classline>span classp>(/span>span classnb>sqrt /span>span classmi>9/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>fixed-point/span> span classnv>cos/span> span classmf>1.0/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/06/14/sicp-section-1-2/>SICP Section 1.2/a>/h1> p classmeta> time datetime2013-06-14T00:54:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idrecursive-process-v-s-iterative-process>h2>Recursive Process V.S. Iterative Process/h2>ul>li>p classfirst>Recursive process/p>p>The substitution model of a recursive process reveals a shape of expansionfollowed by constraction. The expansion occurs as the process builds up achain of defered operations. The contraction occurs as the operations areactually performed./p>/li>li>p classfirst>Iterative process/p>p>An iterative process is one whose state can be summarized by a fixed numberof state variables, together with a fixed rule that describes how the statevariables should be updated as the process moves from state to state and an(optional) end test that specifies the conditions under which the processshould terminate./p>/li>/ul>p>In the iterative case, the program variables provide a complete descriptionof the state of the process at any point, while in the recursive case, thereis some additional "hidden" information, maintained by the interpreter and notcontained in the program variables./p>blockquote classhighlights>In contrasting iteration and recursion, we must be careful not to confusethe notion of a recursive process with the notion of a recursive procedure.When we describe a procedure as recursive, we are referring to thesyntactic fact that the procedure definition refers (either directly orindirectly) to the procedure itself. But when we describe a process asfollowing a pattern that is, say, linearly recursive, we are speaking abouthow the process evolves, not about the syntax of how a procedure is written.It may seem disturbing that we refer to a recursive procedure as generatingan iterative process./blockquote>/div>div classsection idlame-s-theorem>h2>Lames Theorem/h2>blockquote classhighlights>If Euclids Algorithm requires k steps to compute the GCD of some pair,then the smaller number in the pair must be greater than or equal to thekth Fibonacci number./blockquote>/div>div classsection idfermat-s-little-theorem>h2>Fermats Little Theorem/h2>blockquote classhighlights>If n is a prime number and a is any positive integer less than n, then araised to the nth power is congruent to a modulo n./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.9/strong>Answer: The first process is recursive and the second one is iterative./p>p>strong>1.10/strong>Answer: from the definition of (A x y), we have:/p>p>(A 1 10) A(0 (A 1 9)) 2 * (A 1 9) ... 2^9 * (A 1 1) 2^10/p>p>(A 2 4) 65536/p>p>(A 3 3) 65536/p>p>(f n) computes em>2n/em>/p>p>(g n) computes em>2^n/em>/p>p>(h n) computes em>2^2^2... (n times)/em>/p>p>strong>1.11/strong>Answer: This is similar with the example of computing Fibonacci number./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-recursive/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>0/span>span classp>)/span> span classmi>0/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>2/span>span classp>))/span> span classmi>2/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classp>(/span>span classnf>f-recursive/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>3/span>span classp>))/span> span classmi>3/span>span classp>)))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-iterative/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>f-iter/span> span classmi>0/span> span classmi>1/span> span classmi>2/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>f-iter/span> span classnv>a/span> span classnv>b/span> span classnv>c/span> span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>0/span>span classp>)/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>1/span>span classp>)/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>2/span>span classp>)/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>f-iter/span> span classnv>b/span> span classnv>c/span> span classp>(/span>span classnb>+ /span>span classnv>c/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classmi>2/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classmi>3/span>span classp>))/span> span classp>(/span>span classnb>- /span>span classnv>count/span> span classmi>1/span>span classp>)))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.12/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; both row and col indexes start at 0/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>pascal-triangle/span> span classnv>row/span> span classnv>col/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>col/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb> /span>span classnv>row/span> span classnv>col/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>pascal-triangle/span> span classp>(/span>span classnb>- /span>span classnv>row/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>- /span>span classnv>col/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>pascal-triangle/span> span classp>(/span>span classnb>- /span>span classnv>row/span> span classmi>1/span>span classp>)/span> span classnv>col/span>span classp>)))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.15/strong>Answer:/p>p>a. from the the procedure definition, suppose em>p/em> will be called t times,we have:/p>p>a / (3^t) < 0.1, which leads to:/p>p>log(10a) < t, so t ceiling (log(10a)) 5, (the base of the log is 3)/p>p>b. both the space and number of steps depend on how many times em>p/em> is called,so its O(t) O(log(a))./p>p>strong>1.16/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fast-expt/span> span classnv>b/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classnv>n/span> span classmi>1/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classnv>n/span> span classnv>product/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classmi>0/span>span classp>)/span> span classnv>product/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>n/span>span classp>)/span> span classp>(/span>span classnf>fast-expt-iter/span> span classp>(/span>span classnf>square/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classnv>product/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fast-expt-iter/span> span classnv>b/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>product/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>even? /span>span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classnv>n/span> span classmi>2/span>span classp>)/span> span classmi>0/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.17/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classmi>0/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>b/span>span classp>)/span> span classp>(/span>span classnf>mul/span> span classp>(/span>span classnf>double/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>halve/span> span classnv>b/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>+ /span>span classnv>a/span> span classp>(/span>span classnf>mul/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>b/span> span classmi>1/span>span classp>))))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>halve/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.18/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classnv>b/span> span classmi>0/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classnv>b/span> span classnv>sum/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classnv>sum/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>b/span>span classp>)/span> span classp>(/span>span classnf>mul-iter/span> span classp>(/span>span classnf>double/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>halve/span> span classnv>b/span>span classp>)/span> span classnv>sum/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>mul-iter/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>b/span> span classmi>1/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classnv>sum/span>span classp>)))))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>double/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>halve/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>/ /span>span classnv>x/span> span classmi>2/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.19/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; use the matrix multiplication to represent the transformation/span>/span>span classline>/span>span classline>span classc1>; 0 1/span>/span>span classline>span classc1>; (fib(n-1), fib(n)) * (fib(n), fib(n-1) + fib(n)) (fib(n), fib(n+1))/span>/span>span classline>span classc1>; 1 1/span>/span>span classline>/span>span classline>span classc1>; a <- a + b/span>/span>span classline>span classc1>; b <- a/span>/span>span classline>/span>span classline>span classc1>; the state transformation above is just a special case of the below one when/span>/span>span classline>span classc1>; p 0 and q 1/span>/span>span classline>/span>span classline>span classc1>; a <- bq + aq + ap/span>/span>span classline>span classc1>; b <- bp + aq/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fib/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fib-iter/span> span classmi>1/span> span classmi>0/span> span classmi>0/span> span classmi>1/span> span classnv>n/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fib-iter/span> span classnv>a/span> span classnv>b/span> span classnv>p/span> span classnv>q/span> span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>count/span> span classmi>0/span>span classp>)/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>count/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fib-iter/span>/span>span classline> span classnv>a/span>/span>span classline> span classnv>b/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>p/span>span classp>)/span> span classp>(/span>span classnf>square/span> span classnv>q/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>p/span> span classnv>q/span> span classmi>2/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classnv>count/span> span classmi>2/span>span classp>)))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fib-iter/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>q/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>p/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>* /span>span classnv>b/span> span classnv>p/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>q/span>span classp>))/span>/span>span classline> span classnv>p/span>/span>span classline> span classnv>q/span>/span>span classline> span classp>(/span>span classnb>- /span>span classnv>count/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.21/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classc1>; the following expressions produce/span>/span>span classline>span classc1>; 199/span>/span>span classline>span classc1>; 1999/span>/span>span classline>span classc1>; 7/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>199/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>1999/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>smallest-divisor/span> span classmi>19999/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.25/strong>Answer:/p>p>Since em>Scheme/em> has built-in support for arbitrary precision arithmetic, theprocedure will produce the same result as the original em>expmod/em>, however,it will be very inefficient since the huge number arithmetic will take muchlonger time than the numbers can be represented by a single computer word./p>p>The original em>expmod/em> used the successive squaring, the numbers to be processedwill never be larger than m^2./p>p>strong>1.26/strong>Answer:/p>p>With the calling of em>square/em>, the original problem can be reduced to a subproblem with half of the size at each of the step when even? test is true.So T(n) T(n/2) O(logn)/p>p>However, if the explicit multiplication used instead, the recursive callof expmod will be evaluated twice, it not only just compute the subproblems two time, it is actually a tree recursion like the first solutionfor computing fibnacci sequence, so the number of expmod calls growexponentially, which conclues that T(n) O(2^n * logn) O(n)/p>p>strong>1.27/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fermat-test/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classmi>2/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>n/span> span classnv>a/span>span classp>)/span> span classnv>true/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classp>(/span>span classnf>expmod/span> span classnv>a/span> span classnv>n/span> span classnv>n/span>span classp>)/span> span classnv>a/span>span classp>))/span> span classnv>false/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnf>fermat-test-iter/span> span classnv>n/span> span classp>(/span>span classnb>+ /span>span classnv>a/span> span classmi>1/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classnv>exp/span> span classnv>m/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>exp/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>exp/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnf>square/span> span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classp>(/span>span classnb>/ /span>span classnv>exp/span> span classmi>2/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))/span>/span>span classline> span classp>(/span>span classk>else /span>span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>base/span> span classp>(/span>span classnf>expmod/span> span classnv>base/span> span classp>(/span>span classnb>- /span>span classnv>exp/span> span classmi>1/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>/span>span classline>span classc1>; Carmichael numbers/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>fermat-test/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these all give #t/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>prime?/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these all give #f/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.28/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>span classline-number>32/span>span classline-number>33/span>span classline-number>34/span>span classline-number>35/span>span classline-number>36/span>span classline-number>37/span>span classline-number>38/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>miller-rabin-test/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>define /span>span classp>(/span>span classnf>try-it/span> span classnv>a/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnf>expmod-with-signal/span> span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>try-it/span> span classp>(/span>span classnb>+ /span>span classmi>2/span> span classp>(/span>span classnf>random/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>2/span>span classp>)))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classnv>exp/span> span classnv>m/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>cond /span>span classp>((/span>span classnb> /span>span classnv>exp/span> span classmi>0/span>span classp>)/span> span classmi>1/span>span classp>)/span>/span>span classline> span classp>((/span>span classnb>even? /span>span classnv>exp/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>square-with-signal/span> span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classp>(/span>span classnb>/ /span>span classnv>exp/span> span classmi>2/span>span classp>)/span> span classnv>m/span>span classp>)/span> span classnv>m/span>span classp>))/span>/span>span classline> span classp>(/span>span classnf>else/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>base/span> span classp>(/span>span classnf>expmod-with-signal/span> span classnv>base/span> span classp>(/span>span classnb>- /span>span classnv>exp/span> span classmi>1/span>span classp>)/span> span classnv>m/span>span classp>))/span> span classnv>m/span>span classp>))))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square-with-signal/span> span classnv>a/span> span classnv>n/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classk>and /span>span classp>(/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classnv>a/span> span classmi>1/span>span classp>))/span>/span>span classline> span classp>(/span>span classnb>not /span>span classp>(/span>span classnb> /span>span classnv>a/span> span classp>(/span>span classnb>- /span>span classnv>n/span> span classmi>1/span>span classp>)))/span>/span>span classline> span classp>(/span>span classnb> /span>span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>)/span> span classmi>1/span>span classp>))/span>/span>span classline> span classmi>0/span>/span>span classline> span classp>(/span>span classnb>remainder /span>span classp>(/span>span classnb>* /span>span classnv>a/span> span classnv>a/span>span classp>)/span> span classnv>n/span>span classp>)))/span>/span>span classline>/span>span classline>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>561/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1105/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1729/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>2465/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>2821/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>6601/span>span classp>)/span>/span>span classline>span classc1>; these will all give #f with quite a chance, but with enough runs, it will/span>/span>span classline>span classc1>; have some false positive/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>newline/span>span classp>)/span>/span>span classline>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>7/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>23/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>103/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1009/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1019/span>span classp>)/span>/span>span classline>span classp>(/span>span classnf>miller-rabin-test/span> span classmi>1000033/span>span classp>)/span>/span>span classline>span classc1>; these will always all give #t/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/05/14/sicp-section-1-1/>SICP Section 1.1/a>/h1> p classmeta> time datetime2013-05-14T00:39:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>blockquote classhighlights>Computational processes are abstract beings that inhabit computers. As theyevolve, processes manipulate other abstract things called data. The evolutionof a process is directed by pattern of rules called a program./blockquote>p>Why use Lisp for the book?/p>blockquote classhighlights>The most significant unique feature of Lisp is the fact that Lisp descriptionsof processes, called procedures, can themselves be represented and manipulatedas Lisp data. The importance of this is that there are powerful program-designtechniques that rely on the ability to blur the traditional distinction between"passive" data and "active" processes./blockquote>p>The three mechanisms of combining simple ideas to form more complex ideas in anypowerful programming languages:/p>ol classarabic simple>li>primitive expressions/li>li>means of combination/li>li>means of abstraction/li>/ol>div classsection idsubstitution-model>h2>Substitution model/h2>ul>li>p classfirst>Applicative order/p>p>Evaluate the operator and operands first and then applies the resulting procedureto the resulting arguments. "Fully expand and then reduce"/p>/li>li>p classfirst>Normal order/p>p>Dont evaluate the operands until their values are needed, instead, substituteoperand expressions for parameters until it obtained an expression involving onlyprimitive operators, and would then perform the evaluation. "Evaluate thearguments and then apply"/p>/li>/ul>/div>div classsection idexample-square-roots-by-newton-s-method>h2>Example: Square Roots by Newtons Method/h2>blockquote classhighlights>The contrast between function and procedure is a reflection of the generaldistinction between describing properties of things and describing how todo things, or, as it is sometimes refered to, the distinction betweendeclarative knowledge and imperative knowledge. In mathematics we areusually concerned with declarative (what is) descriptions, whereas incomputer science we are usually concerned with imperative (how to)descriptions./blockquote>/div>div classsection idexercises>h2>Exercises/h2>p>strong>1.3/strong> Define a procedure that takes three numbers as arguments and return thesum of squares of the two larger numbers./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-of-squares/span> span classnv>a/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>+ /span>span classp>(/span>span classnf>square/span> span classnv>a/span>span classp>)/span> span classp>(/span>span classnf>square/span> span classnv>b/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>min /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>< /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>a/span>/span>span classline> span classnv>b/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnb>max /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnb>< /span>span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classnv>b/span>/span>span classline> span classnv>a/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>sum-of-squares-of-2-largest/span> span classnv>a/span> span classnv>b/span> span classnv>c/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>sum-of-squares/span> span classp>(/span>span classnb>max /span>span classnv>a/span> span classnv>b/span>span classp>)/span> span classp>(/span>span classnb>max /span>span classnv>c/span> span classp>(/span>span classnb>min /span>span classnv>a/span> span classnv>b/span>span classp>))))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.4/strong> Observe that our model of evaluation allows for combinations whoseoperators are compound expressions. Use this observation to describe thebehavior of the following procedure:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>a-plus-abs-b/span> span classnv>a/span> span classnv>b/span>span classp>)/span>/span>span classline> span classp>((/span>span classk>if /span>span classp>(/span>span classnb>> /span>span classnv>b/span> span classmi>0/span>span classp>)/span> span classnv>+/span> span classnv>-/span>span classp>)/span> span classnv>a/span> span classnv>b/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>if b is greater than 0, the operator that will apply to a and b is +, or elseit will be -, so the a-plus-abs-b will always result in a plus abs of b./p>p>strong>1.5/strong>Answer: the interpreter that uses applicative order evaluation will hang dueto the infinite recursive call of p, while an interpreter that uses normalorder evaluation will get 0./p>p>em>Note:/em> strong>p/strong> is a function, strong>(p)/strong> is a call to function p./p>p>strong>1.6/strong>Answer: the interpreter will hang due to the infinite recursive call toem>sqrt-iter/em>. Since List uses applicative order evaluation, in the definitionof new-if, the else-clause will always be evaluated no matter the result ofthe predicate, thus lead to infinite recursive call to sqrt-iter. Thats whystrong>if/strong> needs to be a special form, the predicate expression is evaluated first,and the result determines whether to evaluate the consequent or the alternativeexpression./p>p>strong>1.7/strong>Answer: For small values, the absolute tolerance 0.001 is too large, so theresults become inaccurate. For example, (sqrt 0.001) gives 0.04124542607499115on my machine. (ubuntu 12.10 x86_64); And for large values, due to the precisionlimitation of float-point representation, the guess couldnt be refined to avalue that can be represented within the tolerance. In such cases, the programcan endlessly alternate between two guesses that are more than 0.001 away fromthe true square root./p>p>so, instead of using absolute tolerance, we changed to use the relativetolerance of two continuous guess values. This can be demonstrated with thebelow updated good-enough? procedure:/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>guess/span>span classp>))/span> span classmf>0.001/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>strong>1.8/strong>/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classscheme>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cbrt-iter/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classk>if /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classnv>guess/span>/span>span classline> span classp>(/span>span classnf>cbrt-iter/span> span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>x/span>span classp>)))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>/ /span>span classp>(/span>span classnb>+ /span>span classp>(/span>span classnb>/ /span>span classnv>x/span> span classp>(/span>span classnf>square/span> span classnv>guess/span>span classp>))/span> span classp>(/span>span classnb>* /span>span classmi>2/span> span classnv>guess/span>span classp>))/span> span classmi>3/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>good-enough?/span> span classnv>guess/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>< /span>span classp>(/span>span classnb>abs /span>span classp>(/span>span classnb>- /span>span classp>(/span>span classnf>improve/span> span classnv>guess/span> span classnv>x/span>span classp>)/span> span classnv>guess/span>span classp>))/span> span classmf>0.001/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>square/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnb>* /span>span classnv>x/span> span classnv>x/span>span classp>))/span>/span>span classline>/span>span classline>span classp>(/span>span classk>define /span>span classp>(/span>span classnf>cbrt/span> span classnv>x/span>span classp>)/span>/span>span classline> span classp>(/span>span classnf>cbrt-iter/span> span classmf>1.0/span> span classnv>x/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>The only difference between cbrt and sqrt is the strong>improve/strong> procedure./p>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2013/01/06/coursera-online-functional-programming-course-review/>Coursera Online Functional Programming Course - a Retrospective/a>/h1> p classmeta> time datetime2013-01-06T15:52:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>Here comes the summary of the Coursera coursea classreference external hrefhttps://class.coursera.org/progfun-2012-001/class/index>Fucntional Programming Principles in Scala/a>Its a little bit late, it has been two months since I finished the course.This is the first Coursera course I followed from the very beginning to the endand accomplished all the programming assignments with full scores, which helpedme to get the certificate with distinction./p>img alt/images/posts/coursera_scala_certificate.jpg src/images/posts/coursera_scala_certificate.jpg />p>First the excellent parts of the course:/p>ul classsimple>li>Martin Odersky is a pretty good teacher, and all the lectures are welldesigned. I enjoyed watching the lectures a lot and most of which I haveread more than once./li>li>The programming assignments are well structured, with detailed instructionsand step by step guide. In each of the assignments, the whole task is splitinto several steps with approprivate level of abstractions./li>li>There are also many useful supporting materials like scala style guide, sbttutorial, instructions on tools setup for the course, which made it easierto concentrate on the course content. For me, I dont have scala developenvironment setup before the course, and by following the tools setup sectionin only took me less than half an hour to get everything ready for trying theexample code and the assignments./li>/ul>p>As for the less-good things, I would say:/p>ul classsimple>li>Both the lectures and the assignments are quite easy for an experiencedprogrammers (No functional programming background needed), I was expectingmore challenging stuff./li>li>There are no official solutions distributed. (The course will be offeredagain some time later) However, I still think for those students who passedthe course should be qualified to get the solutions so that they can comparethose with their own to see where they can still improve./li>li>Its a pity that this is only the first half of an advanced undergraduatecourse that Martin taught on campus. I am interested in the other half./li>/ul>p>After taking this cousre, I got a deeper understanding of the functionalprogramming basics and it made me feel more comfortable while picking upSICP again (after 3 years). Now, I am convinced that I am able to go throughSICP and finish most of the exercises. Also, I had a firmer grasp of Scalaeven though I didnt write more than 100 lines of Scala before; I understandmore about the scala syntax, idioms and even the motivations behind some of thelanguage structures. E.g., call by name/value, lazy evaluation, currying,pattern matching and so on. I will publish my detailed notes on the lecturesand assignments to this blog later./p>p>To conclude, I really enjoyed taking the course and many thanks to Martin, the TAs, and also the coursera staff for offering such a wonderful course./p>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/21/python-abc/>Python Abc/a>/h1> p classmeta> time datetime2012-08-21T21:06:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>This module provides the infrastructure for defininga classreference external hrefhttp://docs.python.org/glossary.html#term-abstract-base-class>abstract base classes/a>(ABCs) in Python. The ABCs define a minimal set of methods that establish thecharacteristic behavior of the type. For more details about this, seea classreference external hrefhttp://www.python.org/dev/peps/pep-3119/>PEP 3119/a>./p>/div>div classsection idhighlights>h2>Highlights/h2>p>The module provides a a classreference external hrefhttp://docs.python.org/glossary.html#term-metaclass>metaclass/a>used to create ABCs. An ABC can be subclassed directly. The class also has a registermethod to register unrelated concrete classes (including built-in classes) and unrelatedABCs as virtual subclasses/p>p>Also there are two decorators em>abstractmethod/em> and em>abstractproperty/em>, which will setthe function objects attribute __isabstractmethod__ to True. Only when all of theabstract methods and abstract properties are overriden, can a class that has a metaclassderived from ABCMeta be instantiated./p>/div>div classsection idcode-comments>h2>Code comments/h2>div classsection idabcmeta-new>h3>ABCMeta.__new__/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>__new__/span>span classp>(/span>span classn>mcls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classn>bases/span>span classp>,/span> span classn>namespace/span>span classp>):/span>/span>span classline> span classn>cls/span> span classo>/span> span classnb>super/span>span classp>(/span>span classn>ABCMeta/span>span classp>,/span> span classn>mcls/span>span classp>)/span>span classo>./span>span classn>__new__/span>span classp>(/span>span classn>mcls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classn>bases/span>span classp>,/span> span classn>namespace/span>span classp>)/span>/span>span classline> span classc># Compute set of abstract method names/span>/span>span classline> span classn>abstracts/span> span classo>/span> span classnb>set/span>span classp>(/span>span classn>name/span>/span>span classline> span classk>for/span> span classn>name/span>span classp>,/span> span classn>value/span> span classow>in/span> span classn>namespace/span>span classo>./span>span classn>items/span>span classp>()/span>/span>span classline> span classk>if/span> span classnb>getattr/span>span classp>(/span>span classn>value/span>span classp>,/span> span classs>"__isabstractmethod__"/span>span classp>,/span> span classbp>False/span>span classp>))/span>/span>span classline> span classk>for/span> span classn>base/span> span classow>in/span> span classn>bases/span>span classp>:/span>/span>span classline> span classk>for/span> span classn>name/span> span classow>in/span> span classnb>getattr/span>span classp>(/span>span classn>base/span>span classp>,/span> span classs>"__abstractmethods__"/span>span classp>,/span> span classnb>set/span>span classp>()):/span>/span>span classline> span classn>value/span> span classo>/span> span classnb>getattr/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>name/span>span classp>,/span> span classbp>None/span>span classp>)/span>/span>span classline> span classk>if/span> span classnb>getattr/span>span classp>(/span>span classn>value/span>span classp>,/span> span classs>"__isabstractmethod__"/span>span classp>,/span> span classbp>False/span>span classp>):/span>/span>span classline> span classn>abstracts/span>span classo>./span>span classn>add/span>span classp>(/span>span classn>name/span>span classp>)/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>__abstractmethods__/span> span classo>/span> span classnb>frozenset/span>span classp>(/span>span classn>abstracts/span>span classp>)/span>/span>span classline>/span>span classline> span classc># chaoc: caches are the typical usages of weak references/span>/span>span classline>/span>span classline> span classc># Set up inheritance registry/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_registry/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_cache/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache/span> span classo>/span> span classn>WeakSet/span>span classp>()/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache_version/span> span classo>/span> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span>/span>span classline> span classk>return/span> span classn>cls/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>ul classsimple>li>It first creates a type object cls. (super(ABCMeta, mcls) is type)/li>li>Iterate through all the attributes (including all the attributes inheritedfrom all the bases), if any of them have __isabstractmethod__ set to true,add it to clss __abstractmethods__./li>li>Initialize the attributes _abc_registry, _abc_cache, _abc_negative_cacheand _abc_negative_cache_version, which are used to speed up the check in__instancecheck__ and __subclasscheck__./li>/ul>/div>div classsection idabcmeta-register-cls-subclass>h3>ABCMeta.register(cls, subclass)/h3>p>See the added comments in line/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>register/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>subclass/span>span classp>):/span>/span>span classline> span classsd>"""Register a virtual subclass of an ABC."""/span>/span>span classline> span classc># chaoc: sanity check to make sure that subclass is class type/span>/span>span classline> span classc># either a type object (for new style classes) or the type is/span>/span>span classline> span classc># the same as ClassType(for old style classes)/span>/span>span classline> span classk>if/span> span classow>not/span> span classnb>isinstance/span>span classp>(/span>span classn>subclass/span>span classp>,/span> span classp>(/span>span classnb>type/span>span classp>,/span> span classn>types/span>span classo>./span>span classn>ClassType/span>span classp>)):/span>/span>span classline> span classk>raise/span> span classne>TypeError/span>span classp>(/span>span classs>"Can only register classes"/span>span classp>)/span>/span>span classline> span classk>if/span> span classnb>issubclass/span>span classp>(/span>span classn>subclass/span>span classp>,/span> span classn>cls/span>span classp>):/span>/span>span classline> span classk>return/span> span classc># Already a subclass/span>/span>span classline> span classc># Subtle: test for cycles *after* testing for "already a subclass";/span>/span>span classline> span classc># this means we allow X.register(X) and interpret it as a no-op./span>/span>span classline> span classk>if/span> span classnb>issubclass/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>subclass/span>span classp>):/span>/span>span classline> span classc># This would create a cycle, which is bad for the algorithm below/span>/span>span classline> span classk>raise/span> span classne>RuntimeError/span>span classp>(/span>span classs>"Refusing to create an inheritance cycle"/span>span classp>)/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>_abc_registry/span>span classo>./span>span classn>add/span>span classp>(/span>span classn>subclass/span>span classp>)/span>/span>span classline> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span> span classo>+/span> span classmi>1/span> span classc># Invalidate negative cache/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idabcmeta-instancecheck>h3>ABCMeta.__instancecheck__/h3>p>See the added comments in line/p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>__instancecheck__/span>span classp>(/span>span classn>cls/span>span classp>,/span> span classn>instance/span>span classp>):/span>/span>span classline> span classsd>"""Override for isinstance(instance, cls)."""/span>/span>span classline> span classc># Inline the cache checking when it's simple./span>/span>span classline> span classn>subclass/span> span classo>/span> span classnb>getattr/span>span classp>(/span>span classn>instance/span>span classp>,/span> span classs>'__class__'/span>span classp>,/span> span classbp>None/span>span classp>)/span>/span>span classline> span classk>if/span> span classn>subclass/span> span classow>is/span> span classow>not/span> span classbp>None/span> span classow>and/span> span classn>subclass/span> span classow>in/span> span classn>cls/span>span classo>./span>span classn>_abc_cache/span>span classp>:/span>/span>span classline> span classk>return/span> span classbp>True/span>/span>span classline> span classn>subtype/span> span classo>/span> span classnb>type/span>span classp>(/span>span classn>instance/span>span classp>)/span>/span>span classline> span classc># Old-style instances/span>/span>span classline> span classk>if/span> span classn>subtype/span> span classow>is/span> span classn>_InstanceType/span>span classp>:/span>/span>span classline> span classn>subtype/span> span classo>/span> span classn>subclass/span>/span>span classline> span classc># chaoc: subtype will also be subclass for old style classes/span>/span>span classline> span classc># as assigned in the above step/span>/span>span classline> span classk>if/span> span classn>subtype/span> span classow>is/span> span classn>subclass/span> span classow>or/span> span classn>subclass/span> span classow>is/span> span classbp>None/span>span classp>:/span>/span>span classline> span classc># chaoc: check if the negative cache is safe to use or not/span>/span>span classline> span classk>if/span> span classp>(/span>span classn>cls/span>span classo>./span>span classn>_abc_negative_cache_version/span> span classo>/span>/span>span classline> span classn>ABCMeta/span>span classo>./span>span classn>_abc_invalidation_counter/span> span classow>and/span>/span>span classline> span classn>subtype/span> span classow>in/span> span classn>cls/span>span classo>./span>span classn>_abc_negative_cache/span>span classp>):/span>/span>span classline> span classk>return/span> span classbp>False/span>/span>span classline> span classc># Fall back to the subclass check./span>/span>span classline> span classk>return/span> span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subtype/span>span classp>)/span>/span>span classline> span classk>return/span> span classp>(/span>span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subclass/span>span classp>)/span> span classow>or/span>/span>span classline> span classn>cls/span>span classo>./span>span classn>__subclasscheck__/span>span classp>(/span>span classn>subtype/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idabcmeta-subclasscheck>h3>ABCMeta.__subclasscheck__/h3>p>The code and comment in this function is very clear and straightforward./p>p>Just make sure the different cases needed to check:/p>ol classarabic simple>li>check the subclass hook/li>li>check if its a direct subclass through __mro__/li>li>check if its a subclass of a registered class (issubclass is called to dorecursive check)/li>li>check if its a subclass of a subclass (issubclass is called to do recursivecheck)/li>/ol>p>In this post, we only talk about the defitions of ABCMeta. We will see thetypical usages in the strong>collections/strong> module./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/19/python-bisect/>Python Bisect/a>/h1> p classmeta> time datetime2012-08-19T20:01:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>This module provides support for maintaining a list in sorted order withouthaving to sort the list after each insertion. It uses a basic bisectionalgorithm similar with the classic binary search./p>/div>div classsection idreview-of-binary-search>h2>Review of binary search/h2>p>According to a classreference external hrefhttp://www.amazon.com/Programming-Pearls-2nd-Edition-Bentley/dp/0201657880/refsr_1_1?ieUTF8&qid1345379618&sr8-1&keywordsprogramming+pearls>Programming Pearls/a>by Jon Bentley, Its very hard to write a correct binary search(Unbelievable, Uh?).Below is the note from the book:/p>blockquote classhighlights>Ive assigned binary search in courses at Bell Labs and IBM.Professional programmers had a couple of hours to convert its descriptioninto a program in the language of their choice; a high-level pseudocodewas fine. At the end of the speci?ed time, almost all the programmersreported that they had correct code for the task. We would then take thirtyminutes to examine their code, which the programmers did with test cases.In several classes and with over a hundred programmers, the results variedlittle: ninety percent of the programmers found bugs in their programs (andI wasnt always convinced of the correctness of the code in which no bugs werefound). I was amazed: given ample time, only about ten percent of professionalprogrammers were able to get this small program right. But they arent the onlyones to ?nd this task difficult: in the history in Section 6.2.1 of hisSorting and Searching, Knuth points out that while the first binary searchwas published in 1946, the first published binary search without bugs did notappear until 1962./blockquote>p>Understanding how to use loop invariants in composing a program is very important,so lets first implement a binary search and prove the correctness utilizing this.Here we use a simplified specification compared to the bsearch function in the Cstandard library./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>/pre>/td>td classcode>pre>code classcpp>span classline>span classkt>int/span> span classn>binsearch/span>span classp>(/span>span classkt>int/span> span classn>x/span>span classp>,/span> span classkt>int/span>span classo>*/span> span classn>A/span>span classp>,/span> span classkt>int/span> span classn>n/span>span classp>)/span>/span>span classline>span classc1>// @require 0 < n && n < length(A)/span>/span>span classline>span classc1>// @require is_sorted(A, n)/span>/span>span classline>span classcm>/* @ensures (-1 result && !is_in(x, A, n))/span>/span>span classline>span classcm> || ((0 < result && result < n) && Aresult x)/span>/span>span classline>span classcm>*//span>/span>span classline>span classp>{/span>/span>span classline> span classkt>int/span> span classn>lower/span> span classo>/span> span classmi>0/span>span classp>,/span> span classn>higher/span> span classo>/span> span classn>n/span>span classp>;/span>/span>span classline> span classkt>int/span> span classn>mid/span>span classp>;/span>/span>span classline>/span>span classline> span classk>while/span> span classp>(/span>span classn>lower/span> span classo></span> span classn>higher/span>span classp>)/span>/span>span classline> span classc1>// @loop_invariant 0 < lower && lower < higher && higher < n/span>/span>span classline> span classc1>// @loop_invariant (lower 0 || Alower - 1 < x)/span>/span>span classline> span classc1>// @loop_invariant (higher n || Ahigher > x)/span>/span>span classline> span classp>{/span>/span>span classline> span classn>mid/span> span classo>/span> span classn>lower/span> span classo>+/span> span classp>(/span>span classn>higher/span> span classo>-/span> span classn>lower/span>span classp>)/span> span classo>//span> span classmi>2/span>span classp>;/span>/span>span classline> span classc1>// @assert lower < mid && mid < higher/span>/span>span classline> span classk>if/span> span classp>(/span>span classn>A/span>span classp>/span>span classn>mid/span>span classp>/span> span classo>/span> span classn>x/span>span classp>)/span>/span>span classline> span classk>return/span> span classn>mid/span>span classp>;/span>/span>span classline> span classk>else/span> span classk>if/span> span classp>(/span>span classn>A/span>span classp>/span>span classn>mid/span>span classp>/span> span classo></span> span classn>x/span>span classp>)/span>/span>span classline> span classn>lower/span> span classo>/span> span classn>mid/span> span classo>+/span> span classmi>1/span>span classp>;/span>/span>span classline> span classk>else/span>/span>span classline> span classn>higher/span> span classo>/span> span classn>mid/span>span classp>;/span>/span>span classline> span classp>}/span>/span>span classline> span classk>return/span> span classo>-/span>span classmi>1/span>span classp>;/span>/span>span classline>span classp>}/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>Its easy to prove that the loop invariants are strong enough to imple thepostcodition of the function(@ensures). Does this function terminate? In theloop body, we have lower < higher, so lower < mid && mid < higher, then theintervals from em>lower/em> to em>mid/em> and from em>(mid+1)/em> to em>higher/em> are strictlysmaller than the original interval (lower, higher), unless we find the element,the difference between higher and lower will eventually become 0 and we willexit the loop./p>p>strong>The bisect() functions provided in this module are useful for finding theinsertion points but can be tricky or awkward to use for common searchingtasks./strong>/p>/div>div classsection idcode-comments>h2>Code comments/h2>p>The above binsearch function will return the first of the elements that equalsto the target if there are more than one. Sometimes its required to find theleft most one or the right most one. We can achieve this by using the bisect()functions. Lets examine the pre and post conditions, and also loop invariants./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>bisect_right/span>span classp>(/span>span classn>a/span>span classp>,/span> span classn>x/span>span classp>,/span> span classn>lo/span>span classo>/span>span classmi>0/span>span classp>,/span> span classn>hi/span>span classo>/span>span classbp>None/span>span classp>):/span>/span>span classline>/span>span classline> span classc># Let l be the original lo passed in, and h be hi. In order to differentiate./span>/span>span classline>/span>span classline> span classc># @requires 0 < l && l < h && h < len(a)/span>/span>span classline> span classc># @requires is_sorted(al:h)/span>/span>span classline> span classc># @ensures all e in al:result have e < x, and all e in aresult:h have e > x/span>/span>span classline>/span>span classline> span classk>while/span> span classn>lo/span> span classo></span> span classn>hi/span>span classp>:/span>/span>span classline> span classc># @loop_invariant l < lo && lo < hi && hi < h/span>/span>span classline> span classc># @loop_invariant lo l || alo - 1 < x/span>/span>span classline> span classc># @loop_invariant hi h || ahi > x/span>/span>span classline> span classn>mid/span> span classo>/span> span classp>(/span>span classn>lo/span> span classo>+/span> span classn>hi/span>span classp>)/span> span classo>///span> span classmi>2/span>/span>span classline> span classc># @assert lower < mid && mid < higher/span>/span>span classline> span classk>if/span> span classn>x/span> span classo></span> span classn>a/span>span classp>/span>span classn>mid/span>span classp>:/span>/span>span classline> span classn>hi/span> span classo>/span> span classn>mid/span>/span>span classline> span classk>else/span>span classp>:/span>/span>span classline> span classn>lo/span> span classo>/span> span classn>mid/span> span classo>+/span> span classmi>1/span>/span>span classline> span classk>return/span> span classn>lo/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>After exiting the loop, we have lo hi. Now we have to distinguish some cases:/p>ul classsimple>li>If lo l, from the third conjunct, we know that ahi > x, and since lo hi,we have alo > x. In this case, all e in al:h > x/li>li>If hi h, from the second conjunct, we know that alo - 1 < x, in this case,all e in al:h < x/li>li>if lo ! l and hi ! h, from the second and third conjuncts, we know thatalo - 1 < x, ahi > x. The post condition still holds./li>/ul>p>We can do the same analysis on the function bisect_left()./p>p>Note: In the pre condition I explicitly written down that lo < hi is required, thecode will directly return lo when hi is less than or equal to lo, but thats simplymeaningless, if this is the case, the sorted order of a after we insert elementbefore the index returned by the function./p>div classsection idabout-the-function-prototype>h3>About the function prototype/h3>p>In the doc of the module, its strong>bisect.bisect_right(a, x, lo0, hilen(a))/strong>while in the source code, its strong>def bisect_left(a, x, lo0, hiNone)/strong>/p>p>strong>bisect.bisect_right(a, x, lo0, hilen(a))/strong> is not valid python code, you willget error like this: strong>NameError: name a is not defined./strong> This is because defaultvalues are computed and bound at the function definition time rather than when youcall the function. This means that you cant have a default which is dependent onsomething that is not known until the function is called./p>/div>/div>div classsection idpythonic-stuff>h2>Pythonic stuff/h2>div classsection idoverride-function-definitions-in-python>h3>Override function definitions in Python/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>/pre>/td>td classcode>pre>code classpython>span classline>span classc># Overwrite above definitions with a fast C implementation/span>/span>span classline>span classk>try/span>span classp>:/span>/span>span classline> span classkn>from/span> span classnn>_bisect/span> span classkn>import/span> span classo>*/span>/span>span classline>span classk>except/span> span classne>ImportError/span>span classp>:/span>/span>span classline> span classk>pass/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idgotcha-mutable-default-arguments>h3>Gotcha -- Mutable default arguments/h3>p>See a classreference external hrefhttp://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument>here/a>for more details./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/18/supporting-latex-in-octopress/>Support LaTex in Octopress/a>/h1> p classmeta> time datetime2012-08-18T00:57:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>It took me some time to finally get latex math formulas working in Octopress.If you googled ‘Octopress latex’, you can get quite a few online resources abouthow to support latex in octopress, with various levels of complexity. In thispost, I will write down how I achieve this./p>h2>The initial attempt/h2>p>As I installed the a hrefhttps://github.com/xdissent/jekyll-rst>jekyll-rst/a> pluginto use rst to write my posts, I thought it should be easy to write latex mathbecause docutils has native support for it since version 0.8 (A :math: role andalso a .. math: directive introduced for that). However, after I tried to usethese in a octopress post, I found that the post will be rendered to empty. Forexample, if I insert the following rst code into my post, the whole post becomesempty; but after removing this line, everything is fine./p>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>/pre>/td>td classcode>pre>code class>span classline>The area of a circle is :math:`A_\text{c} (\pi/4) d^2`./span>/code>/pre>/td>/tr>/table>/div>/figure>p>I also verified that the exact same code can be successfully converted to validhtml using the ‘rst2html.py’ script on my system, so I guess maybe something iswrong in ‘RbST’. I found that in RbST, it has its own copies of rst2html andrst2latex tools under strong> /gems/RbST-0.1.3/lib/rst2parts /strong>,/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>/pre>/td>td classcode>pre>code classconsole>span classline>span classgp>chuchao@chuchao:~/.rvm/gems/ruby-1.9.2-p320/gems/RbST-0.1.3/lib/rst2parts$/span> ls/span>span classline>span classgo>__init__.py rst2html.py rst2latex.py transform.py transform.pyc/span>/span>span classline>span classgp>chuchao@chuchao:~/.rvm/gems/ruby-1.9.2-p320/gems/RbST-0.1.3/lib/rst2parts$/span> ls ../span>span classline>span classgo>rbst.rb rst2parts/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>which will be used in rbst.rb. I have even tried to change rbst.rb to use therst2html.py installed on my system, but this also didn’t get any luck./p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>/pre>/td>td classcode>pre>code classruby>span classline>span classk>class/span> span classnc>RbST/span>/span>span classline>/span>span classline> span classvc>@@executable_path/span> span classo>/span> span classno>File/span>span classo>./span>span classn>expand_path/span>span classp>(/span>span classno>File/span>span classo>./span>span classn>join/span>span classp>(/span>span classno>File/span>span classo>./span>span classn>dirname/span>span classp>(/span>span classbp>__FILE__/span>span classp>),/span> span classs2>"rst2parts"/span>span classp>))/span>/span>span classline> span classvc>@@executables/span> span classo>/span> span classp>{/span>/span>span classline> span classc1># :html > File.join(@@executable_path, "rst2html.py"),/span>/span>span classline> span classss>:html/span> span classo>>/span> span classs2>"/usr/local/bin/rst2html.py"/span>span classp>,/span>/span>span classline> span classss>:latex/span> span classo>>/span> span classno>File/span>span classo>./span>span classn>join/span>span classp>(/span>span classvc>@@executable_path/span>span classp>,/span> span classs2>"rst2latex.py"/span>span classp>)/span>/span>span classline> span classp>}/span>/span>span classline>span classo>./span>span classn>./span>span classo>./span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>Finally, I gave up on this and opened ana hrefhttps://github.com/xdissent/jekyll-rst/issues/6>issue/a> on this for the jekyll-rstplugin. Hope the author can fix this./p>h2>Switch back to markdown and using kramdown/h2>p>After a google search about this issue, seems that the simplest solution is to usekramdown, which has built-in support for latex./p>p>First, install kramdown:code>gem install karmdown/code>/p>p>Then, add mathjax configs into head>/head> tag, in octopress, just add thebelow code into code>/source/_includes/custom/head.html/code>:/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>span classline-number>17/span>span classline-number>18/span>span classline-number>19/span>span classline-number>20/span>span classline-number>21/span>span classline-number>22/span>span classline-number>23/span>span classline-number>24/span>span classline-number>25/span>span classline-number>26/span>span classline-number>27/span>span classline-number>28/span>span classline-number>29/span>span classline-number>30/span>span classline-number>31/span>/pre>/td>td classcode>pre>code classhtml>span classline>span classc><!-- mathjax config similar to math.stackexchange -->/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Config/span>span classp>({/span>/span>span classline> span classnx>tex2jax/span>span classo>:/span> span classp>{/span>/span>span classline> span classnx>inlineMath/span>span classo>:/span> span classp>/span> span classp>/span>span classs1>'$'/span>span classp>,/span>span classs1>'$'/span>span classp>,/span> span classp>/span>span classs2>"\\("/span>span classp>,/span>span classs2>"\\)"/span>span classp>/span> span classp>,/span>/span>span classline> span classnx>processEscapes/span>span classo>:/span> span classkc>true/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Config/span>span classp>({/span>/span>span classline> span classnx>tex2jax/span>span classo>:/span> span classp>{/span>/span>span classline> span classnx>skipTags/span>span classo>:/span> span classp>/span>span classs1>'script'/span>span classp>,/span> span classs1>'noscript'/span>span classp>,/span> span classs1>'style'/span>span classp>,/span> span classs1>'textarea'/span>span classp>,/span> span classs1>'pre'/span>span classp>,/span> span classs1>'code'/span>span classp>/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/x-mathjax-config"/span>span classnt>>/span>/span>span classline> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>Queue/span>span classp>(/span>span classkd>function/span>span classp>()/span> span classp>{/span>/span>span classline> span classkd>var/span> span classnx>all/span> span classo>/span> span classnx>MathJax/span>span classp>./span>span classnx>Hub/span>span classp>./span>span classnx>getAllJax/span>span classp>(),/span> span classnx>i/span>span classp>;/span>/span>span classline> span classk>for/span>span classp>(/span>span classnx>i/span>span classo>/span>span classmi>0/span>span classp>;/span> span classnx>i/span> span classo></span> span classnx>all/span>span classp>./span>span classnx>length/span>span classp>;/span> span classnx>i/span> span classo>+/span> span classmi>1/span>span classp>)/span> span classp>{/span>/span>span classline> span classnx>all/span>span classp>/span>span classnx>i/span>span classp>./span>span classnx>SourceElement/span>span classp>()./span>span classnx>parentNode/span>span classp>./span>span classnx>className/span> span classo>+/span> span classs1>' has-jax'/span>span classp>;/span>/span>span classline> span classp>}/span>/span>span classline> span classp>});/span>/span>span classline>span classnt></script>/span>/span>span classline>/span>span classline>span classnt><script /span>span classna>type/span>span classs>"text/javascript"/span>/span>span classline> span classna>src/span>span classs>"http://cdn.mathjax.org/mathjax/latest/MathJax.js?configTeX-AMS-MML_HTMLorMML"/span>span classnt>>/span>/span>span classline>span classnt></script>/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>See a hrefhttp://kramdown.rubyforge.org/syntax.html#math-blocks>here/a> for more details.After this, we are ready to test latex math in our post. For example:/p>figure classcode>figcaption>span>/span>/figcaption>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>span classline-number>11/span>span classline-number>12/span>span classline-number>13/span>span classline-number>14/span>span classline-number>15/span>span classline-number>16/span>/pre>/td>td classcode>pre>code classlatex>span classline>span classsb>$$/span>span classnb>/span>/span>span classline>span classnv>\begin/span>span classnb>{align/span>span classo>*/span>span classnb>}/span>/span>span classline>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>x,y/span>span classo>)/span>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\phi/span>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnv>\sum/span>span classnb>_{i/span>span classo>/span>span classm>1/span>span classnb>}^n x_ie_i, /span>span classnv>\sum/span>span classnb>_{j/span>span classo>/span>span classm>1/span>span classnb>}^n y_je_j /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\sum/span>span classnb>_{i/span>span classo>/span>span classm>1/span>span classnb>}^n /span>span classnv>\sum/span>span classnb>_{j/span>span classo>/span>span classm>1/span>span classnb>}^n x_i y_j /span>span classnv>\phi/span>span classo>(/span>span classnb>e_i, e_j/span>span classo>)/span>span classnb> /span>span classo>/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> & /span>span classo>(/span>span classnb>x_/span>span classm>1/span>span classnb>, /span>span classnv>\ldots/span>span classnb>, x_n/span>span classo>)/span>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnb> /span>span classnv>\begin/span>span classnb>{array}{ccc}/span>/span>span classline>span classnb> /span>span classnv>\phi/span>span classo>(/span>span classnb>e_/span>span classm>1/span>span classnb>, e_/span>span classm>1/span>span classo>)/span>span classnb> & /span>span classnv>\cdots/span>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>e_/span>span classm>1/span>span classnb>, e_n/span>span classo>)/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\vdots/span>span classnb> & /span>span classnv>\ddots/span>span classnb> & /span>span classnv>\vdots/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\phi/span>span classo>(/span>span classnb>e_n, e_/span>span classm>1/span>span classo>)/span>span classnb> & /span>span classnv>\cdots/span>span classnb> & /span>span classnv>\phi/span>span classo>(/span>span classnb>e_n, e_n/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\end/span>span classnb>{array} /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\left/span>span classo>(/span>span classnb> /span>span classnv>\begin/span>span classnb>{array}{c}/span>/span>span classline>span classnb> y_/span>span classm>1/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> /span>span classnv>\vdots/span>span classnb> /span>span classnv>\\/span>span classnb>/span>/span>span classline>span classnb> y_n/span>/span>span classline>span classnb> /span>span classnv>\end/span>span classnb>{array} /span>span classnv>\right/span>span classo>)/span>span classnb>/span>/span>span classline>span classnv>\end/span>span classnb>{align/span>span classo>*/span>span classnb>}/span>/span>span classline>span classs>$$/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>will render as/p>p>$$\begin{alignem>} & \phi(x,y) \phi \left(\sumem>{i1}^n x_ie_i, \sum/em>{j1}^n y_je_j \right) \sumem>{i1}^n \sum/em>{j1}^n x_i y_j \phi(e_i, e_j) \ & (x_1, \ldots, x_n) \left( \begin{array}{ccc} \phi(e_1, e_1) & \cdots & \phi(e_1, e_n) \ \vdots & \ddots & \vdots \ \phi(e_n, e_1) & \cdots & \phi(e_n, e_n) \end{array} \right) \left( \begin{array}{c} y_1 \ \vdots \ y_n \end{array} \right)\end{align/em>}$$/p>p>And for inline latex code, just use code>$\exp(-\frac{x^2}{2})$/code>, which will give$\exp(-\frac{xsup>2/sup>}{2})$./p>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/14/python-heapq/>Python Heapq/a>/h1> p classmeta> time datetime2012-08-14T22:26:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>div classsection idintroduction>h2>Introduction/h2>p>The module provides an implementation of heap queue algorithm, also known aspriority queue algorithm./p>/div>div classsection idhighlights>h2>Highlights/h2>ul classsimple>li>Zero-based indexing is used, so the childrens index of node with index kare (2*k + 1) and (2*k + 2) respectively./li>li>Internally a min heap is maintained rather than max heap, which is moregenerally used in algorithm textbooks./li>li>Three general functions based on heaps are also provided:/li>/ul>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>span classline-number>4/span>span classline-number>5/span>span classline-number>6/span>span classline-number>7/span>span classline-number>8/span>span classline-number>9/span>span classline-number>10/span>/pre>/td>td classcode>pre>code classpython>span classline>span classc># Merge multiple sorted inputs into a single sorted output/span>/span>span classline>span classc># (for example, merge timestamped entries from multiple log files)/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>merge/span>span classp>(/span>span classo>*/span>span classn>iterables/span>span classp>)/span>/span>span classline>/span>span classline>span classc># The following two functions are effectively like/span>/span>span classline>span classc># sorted(iterable, keykey, reverseTrue):n and/span>/span>span classline>span classc># sorted(iterable, keykey):n,/span>/span>span classline>span classc># but they perform best with smaller values of n/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>nlargest/span>span classp>(/span>span classn>n/span>span classp>,/span> span classn>iterable/span>span classp>,/span> span classn>key/span>span classp>)/span>/span>span classline>span classn>heapq/span>span classo>./span>span classn>nsmallest/span>span classp>(/span>span classn>n/span>span classp>,/span> span classn>iterable/span>span classp>,/span> span classn>key/span>span classp>))/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>/div>div classsection idpythonic-stuff>h2>Pythonic stuff/h2>div classsection idrich-comparison-methods>h3>Rich comparison methods/h3>figure classcode>div classhighlight>table>tr>td classgutter>pre classline-numbers>span classline-number>1/span>span classline-number>2/span>span classline-number>3/span>/pre>/td>td classcode>pre>code classpython>span classline>span classk>def/span> span classnf>cmp_lt/span>span classp>(/span>span classn>x/span>span classp>,/span> span classn>y/span>span classp>):/span>/span>span classline> span classc># use __lt__ if available; otherwise, try __le__/span>/span>span classline> span classk>return/span> span classn>x/span> span classo></span> span classn>y/span> span classk>if/span> span classnb>hasattr/span>span classp>(/span>span classn>x/span>span classp>,/span> span classs>'__lt__'/span>span classp>)/span> span classk>else/span> span classp>(/span>span classow>not/span> span classn>y/span> span classo></span> span classn>x/span>span classp>)/span>/span>/code>/pre>/td>/tr>/table>/div>/figure>p>In python, there are 6 so called "Rich Comparison" methods, x < y callsx.__lt__(y) and others are similar (__le__ and <; __gt__ and >; __eq__ and ;__ne__ and <>). Arguments to rich comparison methods are never coerced. seea classreference external hrefhttp://docs.python.org/glossary.html#term-coercion>coercion/a>/p>/div>/div>div classsection idcode-comments>h2>Code comments/h2>div classsection idwhy-heapify-x-is-o-n>h3>Why heapify(x) is O(n)?/h3>p>This is not obvious at first by seeing the code, given that there is a whileloop in _siftup and also a while loop in _siftdown(called in _siftup). Letslook into it further:/p>ol classarabic simple>li>in the while loop of _siftup, it takes O(L) time for nodes that L levelsabove leaves./li>li>and in the while loop of _siftdown called in _siftup, it takes at most Lsteps, so _siftdown is O(L)./li>li>since we have n/4 nodes in level 1, n/8 nodes in level 2, and finally oneroot node, which is lg(n) levels above leaf, so the total amount in the whileloop of heapify is:/li>/ol>div classline-block>div classline>strong>n/4 * c + n/8 * c + n/16 * 3c + ... + 1 * lg(n) * c/strong>, and let n/4 2^k,after simplification, we get:/div>div classline>strong>c * 2^k(1/2^0 + 2/2^1 + 3/2^2 + ... + (k+1)/2^k)/strong>, as the limit ofstrong>(k+1)/2^k/strong> is 0 when k is infinite, so the term in the brackets bound toa constant, from this we can conclude that heapify is O(2^k), which is O(n)./div>div classline>br />/div>/div>/div>div classsection idwhy-it-continues-to-find-the-smaller-child-until-a-leaf-is-hit-in-siftup>h3>Why it continues to find the smaller child until a leaf is hit in _siftup?/h3>p>As explained in the comment by the module author, this is a ad hoc to reducethe comparisons on the following operations on the heap./p>/div>/div>/div> /article> article> header> h1 classentry-title>a href/blog/2012/08/14/intro-on-reading-source-of-python-standard-libraries/>Introduction on Reading Source of Python Standard Libraries Series/a>/h1> p classmeta> time datetime2012-08-14T21:11:00+08:00 pubdate data-updatedtrue>/time> /p> /header> div classentry-content>p>I am going to start the series of posts on reading the source of python standardmodules. I will go with the pure python modules first, and maybe later I cancontinue with C implementations of the modules. Lets see how far I could go./p>div classsection idwhat-will-be-included>h2>What will be included/h2>ul classsimple>li>A brief introduction of the module. (It should be very short, people can go tothe standard library doc for more information.)/li>li>Special highlights about the important APIs, implementation details./li>li>Python features/idioms/tricks/gotchas that worth the whistle, especially thoseI was not familiar with/li>li>Detail explanations about the tricky part of the code if any/li>/ul>/div>div classsection idwhat-will-not-be-included>h2>What will not be included/h2>ul classsimple>li>The example usage of the various APIs, for this kind of stuff,a classreference external hrefhttp://www.doughellmann.com/PyMOTW/>Python module of the week/a> is a betterplace to go/li>/ul>p>Also, alone the way, I may start another series on some specific advanced topicsin python, like strong>descriptor/strong>, strong>decorator/strong>, strong>method resolution order(mro)/strong>and so on. Mainly about why they are introduced into python, how they are used andthe typical use cases. This is inspired by the blogs abouta classreference external hrefhttp://python-history.blogspot.com/>python history/a>/p>p>This post will also be used to track my progress./p>/div>/div> /article> div classpagination> a classprev href2>← Older/a> a href/blog/archives>Blog Archives/a> /div>/div>aside classsidebar> section> h1>Categories/h1> ul idcategories> li classcategory>a href/blog/categories/coursera/>coursera (1)/a>/li>li classcategory>a href/blog/categories/octopress/>octopress (3)/a>/li>li classcategory>a href/blog/categories/python/>python (4)/a>/li>li classcategory>a href/blog/categories/scala/>scala (1)/a>/li>li classcategory>a href/blog/categories/sicp/>sicp (3)/a>/li> /ul>/section>section> h1>Recent Posts/h1> ul idrecent_posts> li classpost> a href/blog/2015/09/07/scala-cake-pattern/>Scala Cake Pattern/a> /li> li classpost> a href/blog/2013/06/27/sicp-section-1-3/>SICP Section 1.3/a> /li> li classpost> a href/blog/2013/06/14/sicp-section-1-2/>SICP Section 1.2/a> /li> li classpost> a href/blog/2013/05/14/sicp-section-1-1/>SICP Section 1.1/a> /li> li classpost> a href/blog/2013/01/06/coursera-online-functional-programming-course-review/>Coursera online functional programming course - a retrospective/a> /li> /ul>/section>section> h1>Recent Comments/h1> div iddsq-recentcomments classdsq-widget> script typetext/javascript srchttp://disqus.com/forums/chaoc/recent_comments_widget.js?hide_avatars1> /script> /div>/section>section> h2>Reading List/h2> div> script typetext/javascript srchttp://www.douban.com/service/badge/3607474/?showdolist&n6&columns3&hidelogoyes&catbook > /script> /div>/section>section> h1>Tags/h1> ul classtag-cloud> a stylefont-size: 185% href/blog/tags/chapter-1/>Chapter 1/a>a stylefont-size: 210% href/blog/tags/sicp/>SICP/a>a stylefont-size: 150% href/blog/tags/scala/>Scala/a>a stylefont-size: 90% href/blog/tags/blog/>blog/a>a stylefont-size: 90% href/blog/tags/github/>github/a>a stylefont-size: 90% href/blog/tags/heap/>heap/a>a stylefont-size: 90% href/blog/tags/latex/>latex/a>a stylefont-size: 185% href/blog/tags/octopress/>octopress/a>a stylefont-size: 90% href/blog/tags/priority-queue/>priority queue/a>a stylefont-size: 210% href/blog/tags/python/>python/a> /ul>/section> /aside> /div> /div> footer rolecontentinfo>p> Copyright © 2015 - Chao Chu - span classcredit>Powered by a hrefhttp://octopress.org>Octopress/a>/span>/p>/footer> script typetext/javascript> var disqus_shortname chaoc; var disqus_script count.js; (function () { var dsq document.createElement(script); dsq.type text/javascript; dsq.async true; dsq.src http:// + disqus_shortname + .disqus.com/ + disqus_script; (document.getElementsByTagName(head)0 || document.getElementsByTagName(body)0).appendChild(dsq); }());/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]