﻿<?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-ivaneeo's blog-随笔分类-scheme－语言之母</title><link>http://www.blogjava.net/ivanwan/category/7554.html</link><description>自由的力量，自由的生活。</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 10:43:40 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 10:43:40 GMT</pubDate><ttl>60</ttl><item><title>sin函数的递归过程</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/31/61020.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Mon, 31 Jul 2006 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/31/61020.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/61020.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/31/61020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/61020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/61020.html</trackback:ping><description><![CDATA[The sine of an angle (specified in
radians) can be computed by making use of the approximation
<tt>sin</tt><em>x</em><img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/book-Z-G-D-20.gif" alt="book-Z-G-D-20.gif" border="0" height="6" width="10" /><em>x</em>
if <em>x</em> is
sufficiently small, and the trigonometric identity<br />    <img style="width: 171px; height: 30px;" src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-19.gif" alt="ch1-Z-G-19.gif" border="0" /><br /><br /> 
to reduce the size of the argument of <tt>sin</tt>.  (For
purposes of this exercise an angle is considered ``sufficiently
small'' if its magnitude is not greater than 0.1 radians.) These
ideas are incorporated in the following procedures:<br /><tt>    (define (cube x) (* x x x))<br />
    (define (p x) (- (* 3 x) (* 4 (cube x))))<br />
    (define (sine angle)<br />
       (if (not (&gt; (abs angle) 0.1))<br />
           angle<br />
           (p (sine (/ angle 3.0)))))<br /><br /></tt><img src ="http://www.blogjava.net/ivanwan/aggbug/61020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-31 15:02 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/31/61020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>得到找零的方法数</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/30/60864.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 30 Jul 2006 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/30/60864.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60864.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/30/60864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60864.html</trackback:ping><description><![CDATA[有100美元需找零.<br />    美元中有50美分(half-dollars),25美分(quarters),10美分(dimes),5美分(nickels),1美分(pennies).<br />总共有多少种方式?<br /><br />分成两步:<br />    1.计算使用50美分找零的方法数.<br />    2.上面数目加上除了使用50美分找零的方法数以外的数目.<br /><br />(define (count-change amount)<br />  (cc amount 6))<br /><br />(define (first-denomination kinds-of-coins)<br />  (cond ((= kinds-of-coins 1) 1)<br />    ((= kinds-of-coins 2) 2)<br />    ((= kinds-of-coins 3) 5)<br />    ((= kinds-of-coins 4) 10)<br />    ((= kinds-of-coins 5) 20)<br />    ((= kinds-of-coins 6) 50)))<br /><br />(define (cc amount kinds-of-coins)<br />  (cond ((= amount 0) 1)<br />    ((or (&lt; amount 0) <br />        (= kinds-of-coins 0))<br />     0)<br />    (else (+ (cc (- amount                                ;第一步<br />            (first-denomination kinds-of-coins))<br />             kinds-of-coins)<br />         (cc amount                                         ;第二步<br />             (- kinds-of-coins 1))))))<br /><img src ="http://www.blogjava.net/ivanwan/aggbug/60864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-30 15:51 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/30/60864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Fibonacci函数和递归树</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/30/60851.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 30 Jul 2006 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/30/60851.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60851.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/30/60851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60851.html</trackback:ping><description><![CDATA[Fibonacci函数定义如下:<br /><img style="width: 314px; height: 59px;" src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-7.gif" alt="ch1-Z-G-7.gif" border="0" /><br /><br /><tt>(define (fib n)<br />
  (cond ((= n 0) 0)<br />
        ((= n 1) 1)<br />
        (else (+ (fib (- n 1))<br />
                 (fib (- n 2))))))<br />递归数如下:<br /><img style="width: 502px; height: 401px;" src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-13.gif" alt="ch1-Z-G-13.gif" border="0" /><br /><br /></tt><em>F</em><em>i</em><em>b</em>(<em>n</em>)非常接近<img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/book-Z-G-D-11.gif" alt="book-Z-G-D-11.gif" border="0" height="12" width="7" /><sup><em>n</em></sup><sup><em></em></sup>/<img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/book-Z-G-D-13.gif" alt="book-Z-G-D-13.gif" border="0" height="14" width="11" />5<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/book-Z-G-D-11.gif" alt="book-Z-G-D-11.gif" border="0" height="18" width="152" /><br /><br />同样下面的式子也成立:<br /><img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-15.gif" alt="ch1-Z-G-15.gif" border="0" height="15" width="63" /><br /><br />同样使用线性迭代效率要高的多:<br /><br /><tt>(define (fib n)<br />
  (fib-iter 1 0 n))<br /><br />
(define (fib-iter a b count)<br />
  (if (= count 0)<br />
      b<br />
      (fib-iter (+ a b) a (- count 1))))</tt><br /><img src ="http://www.blogjava.net/ivanwan/aggbug/60851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-30 13:59 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/30/60851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ackermann函数</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/30/60844.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 30 Jul 2006 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/30/60844.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60844.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/30/60844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60844.html</trackback:ping><description><![CDATA[Ackermann函数可用递推关系如下定义<br />
        　　　　A（m，0）=A（m-1，0） m=1，2，…<br />
        　　　　A（m，n）=A（m-1，A（m，n-1）） m=1，2，… n=1，2，…<br />
        　　初始条件为<br />
        　　　　A（0，n）=n+1，n=0，1，…<br /><br /><tt>(define (A x y)<br />
  (cond ((= y 0) 0)<br />
        ((= x 0) (* 2 y))<br />
        ((= y 1) 2)<br />
        (else (A (- x 1)<br />
                 (A x (- y 1))))))</tt><br /><img src ="http://www.blogjava.net/ivanwan/aggbug/60844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-30 13:21 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/30/60844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>线性递归和迭代</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/30/60834.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 30 Jul 2006 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/30/60834.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60834.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/30/60834.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60834.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60834.html</trackback:ping><description><![CDATA[关于n!求解:<br />1.线性递归<br /><br />    <img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-7.gif" alt="ch1-Z-G-7.gif" border="0" height="200" width="315" /><br /><tt>(define (factorial n)<br />
  (if (= n 1)<br />
      1<br />
      (* n (factorial (- n 1)))))<br />如图所示的线性的膨胀再线性的缩减,就为线性递归.<br /><br />2.迭代<br />    <img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-10.gif" alt="ch1-Z-G-10.gif" border="0" height="148" width="153" /><br /></tt><tt>(define (factorial n)<br />
  (fact-iter 1 1 n))<br /><br />
(define (fact-iter product counter max-count)<br />
  (if (&gt; counter max-count)<br />
      product<br />
      (fact-iter (* counter product)<br />
                 (+ counter 1)<br />
                 max-count)))<br /><br /><b>注:试验(factorial 10000),递归堆栈溢出,而迭代则可以运行.</b><br /></tt><img src ="http://www.blogjava.net/ivanwan/aggbug/60834.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-30 11:37 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/30/60834.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Newton's method for cube roots</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/30/60822.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sun, 30 Jul 2006 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/30/60822.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60822.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/30/60822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60822.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60822.html</trackback:ping><description><![CDATA[
		<b>Exercise 1.8.</b>  <a name="%_idx_560"></a><a name="%_idx_562"></a>Newton's method for cube roots is based on the fact that if <em>y</em> is an
approximation to the cube root of <em>x</em>, then a better approximation is
given by the value<br /><img src="http://www.blogjava.net/images/blogjava_net/ivanwan/pictures/ch1-Z-G-5.gif" alt="ch1-Z-G-5.gif" border="0" height="32" width="60" /><br /><img src ="http://www.blogjava.net/ivanwan/aggbug/60822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-30 10:12 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/30/60822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>newton方法求解某数的平方根</title><link>http://www.blogjava.net/ivanwan/archive/2006/07/29/60791.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Sat, 29 Jul 2006 14:12:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/07/29/60791.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/60791.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/07/29/60791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/60791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/60791.html</trackback:ping><description><![CDATA[
		<br />
		<b>例子:求2的平方根</b>
		<br />
		<br />
		<table border="0">
				<tbody>
						<tr>
								<td valign="top">Guess </td>
								<td valign="top">Quotient </td>
								<td valign="top">Average</td>
						</tr>
						<tr>
								<td valign="top">  </td>
						</tr>
						<tr>
								<td valign="top">1      </td>
								<td valign="top"> (2/1)  =  2        </td>
								<td valign="top">
((2 + 1)/2)  =  1.5 </td>
						</tr>
						<tr>
								<td valign="top">  </td>
						</tr>
						<tr>
								<td valign="top">1.5    </td>
								<td valign="top"> (2/1.5)  =  1.3333 </td>
								<td valign="top">
((1.3333 + 1.5)/2)  =  1.4167 </td>
						</tr>
						<tr>
								<td valign="top">  </td>
						</tr>
						<tr>
								<td valign="top">1.4167 </td>
								<td valign="top"> (2/1.4167)  =  1.4118 </td>
								<td valign="top">
((1.4167 + 1.4118)/2)  =  1.4142 </td>
						</tr>
						<tr>
								<td valign="top">  </td>
						</tr>
						<tr>
								<td valign="top">1.4142 </td>
								<td valign="top">
										<tt>...</tt>
								</td>
								<td valign="top">
										<tt>...</tt>
								</td>
						</tr>
				</tbody>
		</table>
		<br />一.给出一个scheme的过程<br /><tt>(define (sqrt-iter guess x)<br />
  (if (good-enough? guess x)<br />
      guess<br />
      (sqrt-iter (improve guess x)<br />
                 x)))<br />二.改进猜的数(x除以猜的数和猜的数的平均值<br />    </tt><tt>(define (average x y)<br />
      (/ (+ x y) 2))</tt><br /><tt>    </tt><tt>(define (improve guess x)<br />
      (average guess (/ x guess)))<br />三.如何得到比较适合的值.这里做了一个假设,猜的值的平方减去x不小于0.001<br />    </tt><tt>(define (good-enough? guess x)<br />
      (&lt; (abs (- (square guess) x)) 0.001))<br /><br /><font color="#ff0000"><b>注:如何用内部过程来使用上面的部分:<br />(define (sqrt x)<br />  (define (good-enough? guess)<br />    (define (square)<br />      (* guess guess))<br />    (&lt; (abs (- (square) x)) 0.001))<br />  (define (improve guess)<br />    (define (average y)<br />      (/ (+ guess y)<br />     2))<br />    (average (/ x guess)))<br />  (define (sqrt-iter guess)<br />    (if (good-enough? guess)<br />    guess<br />    (sqrt-iter (improve guess))))<br />  (sqrt-iter 1.0))<br /></b></font></tt><br /><img src ="http://www.blogjava.net/ivanwan/aggbug/60791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-07-29 22:12 <a href="http://www.blogjava.net/ivanwan/archive/2006/07/29/60791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在cygwin中编译使用guile的c代码</title><link>http://www.blogjava.net/ivanwan/archive/2006/02/18/31317.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Fri, 17 Feb 2006 16:32:00 GMT</pubDate><guid>http://www.blogjava.net/ivanwan/archive/2006/02/18/31317.html</guid><wfw:comment>http://www.blogjava.net/ivanwan/comments/31317.html</wfw:comment><comments>http://www.blogjava.net/ivanwan/archive/2006/02/18/31317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ivanwan/comments/commentRss/31317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ivanwan/services/trackbacks/31317.html</trackback:ping><description><![CDATA[写一个简单的例子:<br>main.c:<br><pre style="margin: 0em;">#include &lt;stdio.h&gt;<br>#include &lt;stdlib.h&gt;<br>#include &lt;libguile.h&gt;</pre><br>
<pre style="margin: 0em;">int main (int argc, char *argv[])<br>{<br>	SCM func_symbol;<br>	SCM func;<br>	<br>	scm_init_guile();<br>	<br>	// Load the scheme function definitions<br>	scm_c_primitive_load ("script.scm");	<br>	<br>	func_symbol = scm_c_lookup("do-hello");<br>	func = scm_variable_ref(func_symbol);<br>	<br>	scm_call_0 (func);</pre><br>
<tt>	exit(EXIT_SUCCESS);</tt><br>
<br>
<tt>} <br><br>Makefile:<br></tt><pre><code>CC = gcc<br><br>GUILE_CFLAGS = `guile-config compile`<br>GUILE_LIBS = `guile-config link`<br><br>all:<br>	$(CC) $(GUILE_CFLAGS) -c main.c<br>	$(CC) $(GUILE_LIBS) -o main main.o<br>如果连接有错误的话,把<br>	</code><code>$(CC) $(GUILE_LIBS) -o main main.o<br>改成<br>	</code><br>	$(CC) main.o <code>$(GUILE_LIBS)</code> -o main<font color="#ff0000"><br><br>注意:因为这里gcc一般都是把-l参数放在最后一个-o参数之前的.</font><code></code></pre><img src ="http://www.blogjava.net/ivanwan/aggbug/31317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ivanwan/" target="_blank">ivaneeo</a> 2006-02-18 00:32 <a href="http://www.blogjava.net/ivanwan/archive/2006/02/18/31317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>