﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-stargazers-随笔分类-sicp</title><link>http://www.blogjava.net/lzj520/category/38119.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 18 Nov 2009 23:01:24 GMT</lastBuildDate><pubDate>Wed, 18 Nov 2009 23:01:24 GMT</pubDate><ttl>60</ttl><item><title>091118求杨辉三角中的项</title><link>http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Wed, 18 Nov 2009 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html</guid><description><![CDATA[public static int recursion(int l,int n){<br />
&nbsp;&nbsp;int r=0;<br />
&nbsp;&nbsp;if(l==1|n==1|l==n){<br />
&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;}else{<br />
&nbsp;&nbsp;return recursion(l-1,n-1)+recursion(l-1,n);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
<br />
public static void main(String[] args){<br />
System.out.println(recursion(7,4));<br />
}
<img src ="http://www.blogjava.net/lzj520/aggbug/302812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-11-18 16:11 <a href="http://www.blogjava.net/lzj520/archive/2009/11/18/302812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090310 Exercise 1.11. recursive process and iterative</title><link>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Tue, 10 Mar 2009 00:51:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258516.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258516.html</trackback:ping><description><![CDATA[<p><strong>Exercise 1.11.</strong>&nbsp;&nbsp;A function <em>f</em> is defined by the rule that <em>f</em>(<em>n</em>) = <em>n</em> if <em>n</em>&lt;3 and <em>f</em>(<em>n</em>) = <em>f</em>(<em>n</em> - 1) + 2<em>f</em>(<em>n</em> - 2) + 3<em>f</em>(<em>n</em> - 3) if <em>n</em><u>&gt;</u> 3. Write a procedure that computes <em>f</em> by means of a recursive process. Write a procedure that computes <em>f</em> by means of an iterative process. <br />
<br />
recursive:<br />
<br />
(define (fn n)<br />
&nbsp; (cond ((&gt;= n 3) (+ (+ (fn (- n 1)) (* 2 (fn (- n 2)))) (* 3 (fn (- n 3)))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&lt; n 3) n)<br />
&nbsp;&nbsp; ))</p>
<p><br />
&nbsp;iterative:<br />
<br />
(define (re n)<br />
&nbsp; (if (&lt; n 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter 2 1 0 n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )) <br />
(define (iter a b c n)<br />
(if(= n 3)<br />
&nbsp;&nbsp; (ca a b c)<br />
&nbsp;&nbsp; (iter (ca a b c) a b (- n 1))<br />
&nbsp;&nbsp; ) <br />
)<br />
(define (ca a b c)<br />
&nbsp; (+ a (* 2 b) (* 3 c) )<br />
)</p>
 <img src ="http://www.blogjava.net/lzj520/aggbug/258516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-10 08:51 <a href="http://www.blogjava.net/lzj520/archive/2009/03/10/258516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090306 Exercise 1.8 cube-root procedures</title><link>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 06 Mar 2009 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258241.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258241.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258241.html</trackback:ping><description><![CDATA[Exercise 1.8.&nbsp; Newton's method for cube roots is based on the fact that if y is an approximation to<br />
the cube root of x, then a better approximation is given by the value <br />
(x/y2+2y)/3<br />
Use this formula to implement a cube-root procedure analogous to the square-root procedure. (In<br />
section 1.3.4 we will see how to implement Newton's method in general as an abstraction of these<br />
square-root and cube-root procedures.) <br />
<br />
(define (cube x)<br />
&nbsp; (* x x x))<br />
(define (square x)<br />
&nbsp; (* x x ))<br />
(define (result x y)<br />
&nbsp;(/ (+ (/ x (square y)) (* 2 y)) 3))<br />
(define (improve&nbsp; x guess)<br />
&nbsp; (result&nbsp;&nbsp; x guess))<br />
(define (good-enough?&nbsp; x guess)<br />
&nbsp; (&lt; (abs (- (* guess guess guess ) x))0.001))<br />
(define (sqrt-iter x&nbsp; guess)<br />
&nbsp; (if (good-enough?&nbsp; x guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter x (improve&nbsp; x guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )))
 <img src ="http://www.blogjava.net/lzj520/aggbug/258241.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-06 16:22 <a href="http://www.blogjava.net/lzj520/archive/2009/03/06/258241.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090306 Exercise 1.6 Square Roots by Newton's Method</title><link>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Fri, 06 Mar 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258214.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258214.html</trackback:ping><description><![CDATA[Exercise 1.6.&nbsp; Alyssa P. Hacker doesn't see why if needs to be provided as a special form. ``Why<br />
can't I just define it as an ordinary procedure in terms of cond?'' she asks. Alyssa's friend Eva Lu<br />
Ator claims this can indeed be done, and she defines a new version of if: <br />
(define (new-if predicate then-clause else-clause)<br />
&nbsp; (cond (predicate then-clause)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else else-clause)))<br />
Eva demonstrates the program for Alyssa: <br />
(new-if (= 2 3) 0 5)<br />
5<br />
(new-if (= 1 1) 0 5)<br />
0<br />
Delighted, Alyssa uses new-if to rewrite the square-root program: <br />
32(define (sqrt-iter guess x)<br />
&nbsp; (new-if (good-enough? guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter (improve guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x)))<br />
What happens when Alyssa attempts to use this to compute square roots? Explain. <br />
<br />
<br />
<p>(define (new-if predicate then-clause else-clause)<br />
(cond (predicate then-clause)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else-clause)))<br />
(define (average x y)<br />
&nbsp; (/ (+ x y) 2))<br />
(define (improve guess x)<br />
&nbsp; (average guess (/ x guess)))<br />
(define (good-enough? guess x)<br />
&nbsp; (&lt; (abs (- (square guess) x))0.001))<br />
(define (square x)<br />
&nbsp; (* x x))<br />
(define (sqrt-iter guess x)<br />
&nbsp; (new-if (good-enough? guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guess<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-iter (improve guess x)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x)))<br />
<br />
sqrt-iter (improve guess x)作为参数来传递给new-if，在执行new-if的时候，就总是会执行sqrt-iter (improve guess x)，造成了死循环。<br />
</p>
  <img src ="http://www.blogjava.net/lzj520/aggbug/258214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-06 15:19 <a href="http://www.blogjava.net/lzj520/archive/2009/03/06/258214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>090305 Exercise 1.3 returns the sum of the squares of the two larger numbers</title><link>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html</link><dc:creator>lzj520</dc:creator><author>lzj520</author><pubDate>Thu, 05 Mar 2009 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html</guid><wfw:comment>http://www.blogjava.net/lzj520/comments/258058.html</wfw:comment><comments>http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lzj520/comments/commentRss/258058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lzj520/services/trackbacks/258058.html</trackback:ping><description><![CDATA[Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers. <br />
<br />
(define (compare x y) (- x y))<br />
(define (sumsquares x y)(+(* x x)(* y y)))<br />
(define (returnlarge a b c)<br />
&nbsp; (cond ((and (&gt;= (compare a b) 0) (&gt;= (compare c b) 0)) (sumsquares a c)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((and (&gt;= (compare a c) 0) (&gt;= (compare b c) 0)) (sumsquares a b)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((and (&gt;= (compare c a) 0) (&gt;= (compare b a) 0)) (sumsquares b c)) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )<br />
(returnlarge 3 3 2)<br />
<br />
&gt;18
   <img src ="http://www.blogjava.net/lzj520/aggbug/258058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lzj520/" target="_blank">lzj520</a> 2009-03-05 19:56 <a href="http://www.blogjava.net/lzj520/archive/2009/03/05/258058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>