<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>翼若垂天之云 &#187; SICP</title>
	<atom:link href="http://cuitianyi.com/blog/tag/sicp/feed/" rel="self" type="application/rss+xml" />
	<link>http://cuitianyi.com</link>
	<description>Journey of seeking Truth, Love, and Strength.</description>
	<lastBuildDate>Tue, 27 Apr 2010 11:20:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SICP习题解答：第二章（上）</title>
		<link>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%ba%8c%e7%ab%a0%ef%bc%88%e4%b8%8a%ef%bc%89/</link>
		<comments>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%ba%8c%e7%ab%a0%ef%bc%88%e4%b8%8a%ef%bc%89/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 08:52:36 +0000</pubDate>
		<dc:creator>tianyi</dc:creator>
				<category><![CDATA[程序园]]></category>
		<category><![CDATA[习题]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://cuitianyi.com/?p=424</guid>
		<description><![CDATA[
?View Code SCHEME;; 2.1
&#40;define &#40;make-rat n d&#41;
  &#40;if &#40;&#60; d 0&#41;
      &#40;make-rat &#40;- n&#41; &#40;- d&#41;&#41;
      &#40;cons n d&#41;&#41;&#41;
&#160;
;; 2.2
&#40;define &#40;make-point x y&#41;
  &#40;cons x y&#41;&#41;
&#40;define &#40;x-point p&#41;
  &#40;car p&#41;&#41;
&#40;define &#40;y-point p&#41;
  &#40;cdr p&#41;&#41;
&#40;define &#40;make-segment start end&#41;
  &#40;cons start end&#41;&#41;
&#40;define [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p424code2'); return false;">View Code</a> SCHEME</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p4242"><td class="code" id="p424code2"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.1</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>rat n <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #b1b100;">d</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>rat <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> n <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.2</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>point x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point p<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point p<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment start end<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> start end<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>start<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>end<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>midpoint<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>a <span style="color: #66cc66;">&#40;</span>start<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>b <span style="color: #66cc66;">&#40;</span>end<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.3</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 第一种表示</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>rect mid<span style="color: #66cc66;">-</span>point width height<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> mid<span style="color: #66cc66;">-</span>point
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> width <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> height <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>left r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>right r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>bottom r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>top r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 第二种表示</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>rect bottom<span style="color: #66cc66;">-</span>left top<span style="color: #66cc66;">-</span>right<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> bottom<span style="color: #66cc66;">-</span>left top<span style="color: #66cc66;">-</span>right<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>left r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>right r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>bottom r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>top r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 公用函数</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>width r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>right r<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>left r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>height r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>top r<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>bottom r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>area r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>width r<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>height r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>perimeter r<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>width r<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rect<span style="color: #66cc66;">-</span>height r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.4</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">cons</span> x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>m<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>m x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">car</span> z<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>z <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>p q<span style="color: #66cc66;">&#41;</span> p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">cdr</span> z<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>z <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>p q<span style="color: #66cc66;">&#41;</span> q<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.5</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cons<span style="color: #66cc66;">-</span>n x y<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">; x and y are natural numbers</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> x <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> y <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> y <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>car<span style="color: #66cc66;">-</span>n z<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> z <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> z <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cdr<span style="color: #66cc66;">-</span>n z<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> z <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> z <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.6 目前最激动人心的题目</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> zero
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>add<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>n <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> one
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> two
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>add m n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>m <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>n <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.7 为什么这么重复的题目啊</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval a b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.8</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sub<span style="color: #66cc66;">-</span>interval x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                 <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.9 对于加法，结果的上（下）界即两上（下）界之和，故宽度就是两宽度之和，即(a-b)+(c-d)=(a-c)-(b-d)。减法有相同的结论。对于乘法，(a-b)*(c-d)!=(ac-bd)；例如宽度相同的(0,1)、(1,2)、(2,3)两两做乘法运算得到(0,2)、(0,3)、(2,6)三个宽度不同的区间。除法类似。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.10</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>div<span style="color: #66cc66;">-</span>interval x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;Divide by a interval that contains zero -- div-interval&quot;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval x
                    <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                                   <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.11 其实归结起来只有三种情况：0、1或2个区间包括0。</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;[&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;,&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>neg<span style="color: #66cc66;">-</span>interval i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it a b c <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> b <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>neg<span style="color: #66cc66;">-</span>interval<span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> a<span style="color: #66cc66;">&#41;</span> c <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #b1b100;">d</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>neg<span style="color: #66cc66;">-</span>interval<span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it a b <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> c<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> c <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it c <span style="color: #b1b100;">d</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> a <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> c <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> b <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> a <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> c <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">max</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a c<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> b <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> c <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a c<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> b <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>a <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>b <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>c <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">d</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it a b c <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">;;;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval<span style="color: #66cc66;">-</span>test<span style="color: #66cc66;">-</span>cases<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>mul<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.12</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent center percent<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> delta <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> center percent<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> center percent<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> center percent<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>center i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>percent i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">50</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>upper<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>lower<span style="color: #66cc66;">-</span>bound i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>center i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>center i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;±&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>percent i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.13 a(1+b%)*c(1+d%)=ac(1+b%+d%+b%d%)~=ac(1+b%+d%)</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.14 程序将 (div-interval A A) 与 (div-interval A B) 做相同的处理，而没有意识到前者的两个参数并非是独立的。也即，当同一个变量在式子中多次出现时，程序不能意识到它的每次出现必须取相同的值。</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>check<span style="color: #66cc66;">-</span>interval<span style="color: #66cc66;">-</span>arithmetic<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>A <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>B <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>div<span style="color: #66cc66;">-</span>interval A A<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>interval <span style="color: #66cc66;">&#40;</span>div<span style="color: #66cc66;">-</span>interval A B<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>check<span style="color: #66cc66;">-</span>interval<span style="color: #66cc66;">-</span>arithmetic<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>A <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent <span style="color: #cc66cc;">100.0</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>B <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent <span style="color: #cc66cc;">100.0</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent <span style="color: #66cc66;">&#40;</span>div<span style="color: #66cc66;">-</span>interval A A<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>print<span style="color: #66cc66;">-</span>center<span style="color: #66cc66;">-</span>percent <span style="color: #66cc66;">&#40;</span>div<span style="color: #66cc66;">-</span>interval A B<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.15 我认为这公式的两个形式是完全等价的，在Alyssa系统上产生的区间限界不同，是由于Alyssa系统的本质缺陷，而非两个形式的优劣。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.16 当同一个变量在式子中多次出现时，程序不能意识到它的每次出现必须取相同的值。每个变量出现的次数不同会导致Alyssa系统得出的结果不同。无缺陷的区间算术包等价于以下问题：多变量的多项式，每个变量有其取值范围，求多项式的值的取值范围。这个问题属于 Interval Computation 的范畴：http://www.lsi.upc.edu/~robert/mirror/interval-comp/</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.17</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">last-pair</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">last-pair</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.18</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it a b<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> a<span style="color: #66cc66;">&#41;</span> b
        <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> a<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>it <span style="color: #b1b100;">l</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.19</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cc amount coin<span style="color: #66cc66;">-</span>values<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> amount <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> amount <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>no<span style="color: #66cc66;">-</span>more? coin<span style="color: #66cc66;">-</span>values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>cc amount
                <span style="color: #66cc66;">&#40;</span>except<span style="color: #66cc66;">-</span>first<span style="color: #66cc66;">-</span>denomination coin<span style="color: #66cc66;">-</span>values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>cc <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> amount
                   <span style="color: #66cc66;">&#40;</span>first<span style="color: #66cc66;">-</span>denomination coin<span style="color: #66cc66;">-</span>values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                coin<span style="color: #66cc66;">-</span>values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>no<span style="color: #66cc66;">-</span>more? <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>except<span style="color: #66cc66;">-</span>first<span style="color: #66cc66;">-</span>denomination <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>first<span style="color: #66cc66;">-</span>denomination <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; 根据问题的定义，改变表中元素的顺序不会影响回答。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.20</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>same<span style="color: #66cc66;">-</span>parity x . <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> a<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>b <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">even?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> a<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x <span style="color: #66cc66;">&#40;</span>iter <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.21</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span> items<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> items<span style="color: #66cc66;">&#41;</span>
      <span style="color: #b1b100;">nil</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>square <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> items<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> items<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span> items<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> square items<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.22 第一个程序中，程序从前往后处理things中的元素，却每次把平方后的元素加到answer的头部，故结果的顺序会相反。第二个程序中，当cons的两个参数分别是list和元素时，结果并不是把元素加到list后面。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.23</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">for-each</span> <span style="color: #b1b100;">f</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">for-each</span> <span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.24 (1 (2 (3 4)))。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.25</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.26</span>
<span style="color: #808080; font-style: italic;">; (1 2 3 4 5 6)</span>
<span style="color: #808080; font-style: italic;">; ((1 2 3) 4 5 6)</span>
<span style="color: #808080; font-style: italic;">; ((1 2 3) (4 5 6))</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.27</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>deep<span style="color: #66cc66;">-</span><span style="color: #b1b100;">reverse</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> deep<span style="color: #66cc66;">-</span><span style="color: #b1b100;">reverse</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #b1b100;">l</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.28</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fringe <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span>fringe <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>fringe <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.29</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>mobile left right<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> left right<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>branch <span style="color: #b1b100;">length</span> structure<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #b1b100;">length</span> structure<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; (a)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch mobile<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> mobile<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>branch mobile<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> mobile<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span><span style="color: #b1b100;">length</span> branch<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> branch<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure branch<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> branch<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; (b)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>total<span style="color: #66cc66;">-</span>weight x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span>
      x
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>total<span style="color: #66cc66;">-</span>weight <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>total<span style="color: #66cc66;">-</span>weight <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>branch x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;  (c)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>torque x<span style="color: #66cc66;">&#41;</span> 
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>total<span style="color: #66cc66;">-</span>weight <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 
     <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span><span style="color: #b1b100;">length</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>balanced? x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span> true<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>left <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span>right <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>branch x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>torque left<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>torque right<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>balanced? <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure left<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>balanced? <span style="color: #66cc66;">&#40;</span>branch<span style="color: #66cc66;">-</span>structure right<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; (d) 只需更改right-branch和branch-structure中的cadr为cdr</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.30</span>
<span style="color: #808080; font-style: italic;">; 直接定义</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>square <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 使用高阶函数</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>square x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.31</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>tree<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> <span style="color: #b1b100;">f</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>tree<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.32 将子集分为包含与不包含(car s)两种情况。</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>subsets <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>rest <span style="color: #66cc66;">&#40;</span>subsets <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> rest <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> rest<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.33</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>unary<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> p <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>p x<span style="color: #66cc66;">&#41;</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>apppend seq1 seq2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #b1b100;">cons</span> seq2 seq1<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.34</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>horner<span style="color: #66cc66;">-</span>eval x coefficient<span style="color: #66cc66;">-</span><span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>this<span style="color: #66cc66;">-</span>coeff higher<span style="color: #66cc66;">-</span>terms<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> this<span style="color: #66cc66;">-</span>coeff <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x higher<span style="color: #66cc66;">-</span>terms<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #cc66cc;">0</span>
              coefficient<span style="color: #66cc66;">-</span><span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.35</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>count<span style="color: #66cc66;">-</span>leaves <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x y<span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span>
                 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>count<span style="color: #66cc66;">-</span>leaves x<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
                 y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #cc66cc;">0</span>
              <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; 或</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>count<span style="color: #66cc66;">-</span>leaves <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>count<span style="color: #66cc66;">-</span>leaves x<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.36</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>accumulate<span style="color: #66cc66;">-</span>n op init seqs<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> seqs<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #b1b100;">nil</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>accumulate op init <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #b1b100;">car</span> seqs<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>accumulate<span style="color: #66cc66;">-</span>n op init <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #b1b100;">cdr</span> seqs<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.37</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>dot<span style="color: #66cc66;">-</span>product v w<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">*</span> v w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>matrix<span style="color: #66cc66;">-*-</span><span style="color: #b1b100;">vector</span> m v<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>dot<span style="color: #66cc66;">-</span>product x v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> m<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>transpose mat<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate<span style="color: #66cc66;">-</span>n <span style="color: #b1b100;">cons</span> <span style="color: #b1b100;">nil</span> mat<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>matrix<span style="color: #66cc66;">-*-</span>matrix m n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>cols <span style="color: #66cc66;">&#40;</span>transpose n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>matrix<span style="color: #66cc66;">-*-</span><span style="color: #b1b100;">vector</span> cols x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> m<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.38</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fold<span style="color: #66cc66;">-</span>left op initial <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter result rest<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> rest<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>op result <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> rest<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> rest<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter initial <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> fold<span style="color: #66cc66;">-</span>right accumulate<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; 3/2</span>
<span style="color: #808080; font-style: italic;">; 1/6</span>
<span style="color: #808080; font-style: italic;">; (1 (2 (3 ())))</span>
<span style="color: #808080; font-style: italic;">; (((() 1) 2) 3)</span>
<span style="color: #808080; font-style: italic;">; 结合律，以及inital是op的零元。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.39</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>fold<span style="color: #66cc66;">-</span>right <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> y <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>fold<span style="color: #66cc66;">-</span>left <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> y x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.40</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>flatmap proc seq<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>accumulate <span style="color: #b1b100;">append</span> <span style="color: #b1b100;">nil</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> proc seq<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>unique<span style="color: #66cc66;">-</span>pairs n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>flatmap
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> 
     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.41</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>pair<span style="color: #66cc66;">-</span>sum<span style="color: #66cc66;">-</span>no<span style="color: #66cc66;">-</span>more<span style="color: #66cc66;">-</span>than n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>flatmap
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span>
     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> y x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">min</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>triple<span style="color: #66cc66;">-</span>sum<span style="color: #66cc66;">-</span>is n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>filter
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">caddr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>pair<span style="color: #66cc66;">-</span>sum<span style="color: #66cc66;">-</span>no<span style="color: #66cc66;">-</span>more<span style="color: #66cc66;">-</span>than <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.42</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> empty<span style="color: #66cc66;">-</span>board <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>safe? k p<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>not<span style="color: #66cc66;">-</span>same p<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> <span style="color: #66cc66;">&#40;</span>filter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> p<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> p<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span>
   <span style="color: #66cc66;">&#40;</span>not<span style="color: #66cc66;">-</span>same p<span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>not<span style="color: #66cc66;">-</span>same <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">+</span> p <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> k<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>not<span style="color: #66cc66;">-</span>same <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">+</span> p <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> k<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>position n k r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> n r<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>queens board<span style="color: #66cc66;">-</span>size<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>queen<span style="color: #66cc66;">-</span>cols k<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> k <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> empty<span style="color: #66cc66;">-</span>board<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>filter
         <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>positions<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>safe? k positions<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>flatmap
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>rest<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>queens<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>new<span style="color: #66cc66;">-</span>row<span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>position new<span style="color: #66cc66;">-</span>row k rest<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>queens<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                 <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>interval <span style="color: #cc66cc;">1</span> board<span style="color: #66cc66;">-</span>size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>queen<span style="color: #66cc66;">-</span>cols <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> k <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>queen<span style="color: #66cc66;">-</span>cols board<span style="color: #66cc66;">-</span>size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.43 原程序中每个 (queen-cols k) 只需调用一次，而这个程序中，为了计算 (queen-cols k)，需要调用 k 次 (queen-cols (- k 1))；大约需要k!T的时间。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.44</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>up<span style="color: #66cc66;">-</span>split painter n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> n <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
      painter
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>smaller <span style="color: #66cc66;">&#40;</span>up<span style="color: #66cc66;">-</span>split painter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>below painter <span style="color: #66cc66;">&#40;</span>beside smaller smaller<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.45</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>split combo1 combo2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>painter n<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> n <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
        painter
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>smaller <span style="color: #66cc66;">&#40;</span>up<span style="color: #66cc66;">-</span>split painter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>combo1 painter <span style="color: #66cc66;">&#40;</span>combo2 smaller smaller<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.46</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>add<span style="color: #66cc66;">-</span>vect v w<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sub<span style="color: #66cc66;">-</span>vect v w<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>scale<span style="color: #66cc66;">-</span>vect <span style="color: #b1b100;">s</span> v<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #b1b100;">s</span> <span style="color: #66cc66;">&#40;</span>xcor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #b1b100;">s</span> <span style="color: #66cc66;">&#40;</span>ycor<span style="color: #66cc66;">-</span>vect v<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.47</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>frame origin edge1 edge2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> origin edge1 edge2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>origin<span style="color: #66cc66;">-</span>frame frame<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> frame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>edge1<span style="color: #66cc66;">-</span>frame frame<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> frame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>edge2<span style="color: #66cc66;">-</span>frame frame<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">caddr</span> frame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>frame origin edge1 edge2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> origin <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> edge1 edge2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>edge2<span style="color: #66cc66;">-</span>frame frame<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>cddr frame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.48</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment v w<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> v w<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>start<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>end<span style="color: #66cc66;">-</span>segment <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.49</span>
<span style="color: #808080; font-style: italic;">; (a)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> outline<span style="color: #66cc66;">-</span>painter
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>bottom <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>top <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>bottom <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>top <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>segments<span style="color: #66cc66;">-&gt;</span>painter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment left<span style="color: #66cc66;">-</span>top left<span style="color: #66cc66;">-</span>bottom<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment left<span style="color: #66cc66;">-</span>bottom right<span style="color: #66cc66;">-</span>bottom<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment right<span style="color: #66cc66;">-</span>bottom right<span style="color: #66cc66;">-</span>top<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment right<span style="color: #66cc66;">-</span>top left<span style="color: #66cc66;">-</span>top<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; (b)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> X<span style="color: #66cc66;">-</span>painter
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>bottom <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>top <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>bottom <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>top <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>segments<span style="color: #66cc66;">-&gt;</span>painter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment left<span style="color: #66cc66;">-</span>bottom right<span style="color: #66cc66;">-</span>top<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment left<span style="color: #66cc66;">-</span>top right<span style="color: #66cc66;">-</span>bottom<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; (c)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> diamond<span style="color: #66cc66;">-</span>painter
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>bottom <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.5</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>left <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>top <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.5</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>right <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>segments<span style="color: #66cc66;">-&gt;</span>painter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment bottom left<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment left top<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment top right<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment right bottom<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; (d) 来源 http://d.hatena.ne.jp/laughing/20081115/1226737187，有修正</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> wave
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>p0 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.4</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p1 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.35</span> <span style="color: #cc66cc;">0.8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p2 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.4</span> <span style="color: #cc66cc;">0.6</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p3 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.3</span> <span style="color: #cc66cc;">0.6</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p4 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.15</span> <span style="color: #cc66cc;">0.55</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p5 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0.8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p6 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0.6</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p7 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.15</span> <span style="color: #cc66cc;">0.4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p8 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.3</span> <span style="color: #cc66cc;">0.55</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p9 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.35</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p10 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.3</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p11 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.4</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p12 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.5</span> <span style="color: #cc66cc;">0.3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p13 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.6</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p14 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.7</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p15 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.6</span> <span style="color: #cc66cc;">0.45</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p16 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1.0</span> <span style="color: #cc66cc;">0.2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p17 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1.0</span> <span style="color: #cc66cc;">0.4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p18 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.8</span> <span style="color: #cc66cc;">0.6</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p19 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.6</span> <span style="color: #cc66cc;">0.6</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p20 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.65</span> <span style="color: #cc66cc;">0.8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>p21 <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0.6</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>segments<span style="color: #66cc66;">-&gt;</span>painter 
     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p0 p1<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p1 p2<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p2 p3<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p3 p4<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p4 p5<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p6 p7<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p7 p8<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p8 p9<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p9 p10<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p11 p12<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p12 p13<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p14 p15<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p15 p16<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p17 p18<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p18 p19<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p19 p20<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>segment p20 p21<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.50</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>flip<span style="color: #66cc66;">-</span>horiz painter<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>transform<span style="color: #66cc66;">-</span>painter painter
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rotate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">180</span> painter<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>transform<span style="color: #66cc66;">-</span>painter painter
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rotate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">270</span> painter<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>transform<span style="color: #66cc66;">-</span>painter painter
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.51</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>below painter1 painter2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>paint<span style="color: #66cc66;">-</span>bottom
         <span style="color: #66cc66;">&#40;</span>transform<span style="color: #66cc66;">-</span>painter painter1
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>paint<span style="color: #66cc66;">-</span>top
         <span style="color: #66cc66;">&#40;</span>transform<span style="color: #66cc66;">-</span>painter painter2
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span>
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#41;</span>
                            <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>vect <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>frame<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>paint<span style="color: #66cc66;">-</span>bottom frame<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>paint<span style="color: #66cc66;">-</span>top frame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>below painter1 painter2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>rotate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">270</span> <span style="color: #66cc66;">&#40;</span>beside <span style="color: #66cc66;">&#40;</span>rotate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">90</span> painter1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>rotate<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">90</span> painter2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.52</span>
<span style="color: #808080; font-style: italic;">; (a) 略</span>
<span style="color: #808080; font-style: italic;">; (b)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>corner<span style="color: #66cc66;">-</span>split painter n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> n <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
      painter
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>up <span style="color: #66cc66;">&#40;</span>up<span style="color: #66cc66;">-</span>split painter n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>right <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>split painter n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>top<span style="color: #66cc66;">-</span>left up<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>bottom<span style="color: #66cc66;">-</span>right right<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>corner <span style="color: #66cc66;">&#40;</span>corner<span style="color: #66cc66;">-</span>split painter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>beside <span style="color: #66cc66;">&#40;</span>below painter top<span style="color: #66cc66;">-</span>left<span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span>below bottom<span style="color: #66cc66;">-</span>right corner<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; (c)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>limit painter n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>combine4 <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>four identity flip<span style="color: #66cc66;">-</span>horiz
                                  flip<span style="color: #66cc66;">-</span>vert rotate180<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>combine4 <span style="color: #66cc66;">&#40;</span>corner<span style="color: #66cc66;">-</span>split painter n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%ba%8c%e7%ab%a0%ef%bc%88%e4%b8%8a%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>SICP习题解答：第一章（下）</title>
		<link>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0%ef%bc%88%e4%b8%8b%ef%bc%89/</link>
		<comments>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0%ef%bc%88%e4%b8%8b%ef%bc%89/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 15:09:17 +0000</pubDate>
		<dc:creator>tianyi</dc:creator>
				<category><![CDATA[程序园]]></category>
		<category><![CDATA[习题]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://cuitianyi.com/blog/?p=396</guid>
		<description><![CDATA[
?View Code SCHEME;; 1.29
&#40;define &#40;simpson-integral f a b n&#41;
  &#40;define &#40;coefficient i&#41;
    &#40;cond &#40;&#40;or &#40;= i 0&#41; &#40;= i n&#41;&#41; 1&#41;
          &#40;&#40;even? i&#41; 2&#41;
          &#40;else 4&#41;&#41;&#41;
  &#40;let &#40;&#40;h &#40;/ &#40;- b a&#41;n [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p396code4'); return false;">View Code</a> SCHEME</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3964"><td class="code" id="p396code4"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 1.29</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>simpson<span style="color: #66cc66;">-</span>integral <span style="color: #b1b100;">f</span> a b n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>coefficient i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">even?</span> i<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>h <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> b a<span style="color: #66cc66;">&#41;</span>n <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> h <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#40;</span>sum <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> i h<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>coefficient i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #cc66cc;">0</span>
            <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.30</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sum term a next b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a result<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> result <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter a <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.31 只需要把sum改动两处。</span>
<span style="color: #808080; font-style: italic;">; 递归实现</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>product term a next b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">1</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>product term <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> next b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 迭代实现</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>product term a next b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a result<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> result <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter a <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 阶乘</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>factorial n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>product <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; π的近似值</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>calc<span style="color: #66cc66;">-</span>pi n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>term i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>square i<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>square i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>next i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">2</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">&#40;</span>product term <span style="color: #cc66cc;">3.0</span> next n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.32</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term a next b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
      null<span style="color: #66cc66;">-</span>value
      <span style="color: #66cc66;">&#40;</span>combiner <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> next b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term a next b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a result<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>combiner result <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter a null<span style="color: #66cc66;">-</span>value<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.33</span>
<span style="color: #808080; font-style: italic;">; filtered-accumulate 的两种实现</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>filtered<span style="color: #66cc66;">-</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term a next b filter<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>filter x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>filter x<span style="color: #66cc66;">&#41;</span> x null<span style="color: #66cc66;">-</span>value<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
      null<span style="color: #66cc66;">-</span>value
      <span style="color: #66cc66;">&#40;</span>combiner <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>filter <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>filtered<span style="color: #66cc66;">-</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> next b filter<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>filtered<span style="color: #66cc66;">-</span>accumulate combiner null<span style="color: #66cc66;">-</span>value term a next b filter<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>filter x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>filter x<span style="color: #66cc66;">&#41;</span> x null<span style="color: #66cc66;">-</span>value<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a result<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>next a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>combiner result <span style="color: #66cc66;">&#40;</span>do<span style="color: #66cc66;">-</span>filter <span style="color: #66cc66;">&#40;</span>term a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter a null<span style="color: #66cc66;">-</span>value<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; (a)</span>
<span style="color: #66cc66;">&#40;</span>filtered<span style="color: #66cc66;">-</span>accumulate <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> b prime?<span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; (b)</span>
<span style="color: #66cc66;">&#40;</span>filtered<span style="color: #66cc66;">-</span>accumulate <span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gcd</span> a n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.34 (f f)相当于(f 2)，相当于(2 2)，会因为2并非可以调用的函数而出错。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.35 证明不动点直接计算即可，计算的(fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.36 全部代码如下</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> tolerance <span style="color: #cc66cc;">0.00001</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #b1b100;">f</span> first<span style="color: #66cc66;">-</span>guess<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>close<span style="color: #66cc66;">-</span>enough? v1 v2<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> v1 v2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> tolerance<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>try guess<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> guess<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>next <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>close<span style="color: #66cc66;">-</span>enough? guess next<span style="color: #66cc66;">&#41;</span>
          next
          <span style="color: #66cc66;">&#40;</span>try next<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>try first<span style="color: #66cc66;">-</span>guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">log</span> <span style="color: #cc66cc;">1000</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">log</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #b1b100;">f</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>average x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 使用与不使用平均阻尼的步数分别为9与34步。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.37</span>
<span style="color: #808080; font-style: italic;">; 递归版本</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cont<span style="color: #66cc66;">-</span>frac n <span style="color: #b1b100;">d</span> k<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>shift <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> k<span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">0</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span>n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">d</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>cont<span style="color: #66cc66;">-</span>frac <span style="color: #66cc66;">&#40;</span>shift n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>shift <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> k <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 迭代版本</span>
<span style="color: #66cc66;">&#40;</span>dsefine <span style="color: #66cc66;">&#40;</span>cont<span style="color: #66cc66;">-</span>frac n <span style="color: #b1b100;">d</span> k<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter result i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> i<span style="color: #66cc66;">&#41;</span>
        result
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span>n i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">d</span> i<span style="color: #66cc66;">&#41;</span> result<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">0</span> k<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 当k不小于11时，结果有4位精度。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.38</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>e<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> k<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>cont<span style="color: #66cc66;">-</span>frac <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> i <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                   <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             k<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.39</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>tan<span style="color: #66cc66;">-</span>cf x k<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>cont<span style="color: #66cc66;">-</span>frac <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> i<span style="color: #66cc66;">&#41;</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>square x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> i<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             k<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.40</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cubic a b c<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> c <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> b <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.41</span>
<span style="color: #808080; font-style: italic;">; double函数</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>double <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; (((double (double double)) inc) 5) 的值为21。因为 (double double) 得到一个把参数过程应用四次的函数，而 (double (double double)) 事实上是将“把参数过程应用四次”的过程应用两次，也就是一个将参数过程应用十六次的函数。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.42</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> g<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span>g x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.43</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>repeated <span style="color: #b1b100;">f</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> n<span style="color: #66cc66;">&#41;</span>
      <span style="color: #b1b100;">f</span>
      <span style="color: #66cc66;">&#40;</span>compose <span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span>repeated <span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.44</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>n<span style="color: #66cc66;">-</span>times<span style="color: #66cc66;">-</span>smooth <span style="color: #b1b100;">f</span> dx n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>repeated <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>smooth <span style="color: #b1b100;">f</span> dx<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">f</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.45</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>calc<span style="color: #66cc66;">-</span>nth<span style="color: #66cc66;">-</span>root<span style="color: #66cc66;">-</span>with<span style="color: #66cc66;">-</span>t<span style="color: #66cc66;">-</span>average<span style="color: #66cc66;">-</span>damps x n <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>repeated average<span style="color: #66cc66;">-</span>damp <span style="color: #b1b100;">t</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> x <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span><span style="color: #b1b100;">expt</span> y <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 通过实验，得到的规律是，当 2^t&gt;=n 时，用 t 次平均阻尼求 n 次方根是可行的，于是有下面的程序。</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>nth<span style="color: #66cc66;">-</span>root x n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>minimal<span style="color: #66cc66;">-</span><span style="color: #b1b100;">t</span> n<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> n<span style="color: #66cc66;">&#41;</span>
        <span style="color: #cc66cc;">0</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>minimal<span style="color: #66cc66;">-</span><span style="color: #b1b100;">t</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">quotient</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>calc<span style="color: #66cc66;">-</span>nth<span style="color: #66cc66;">-</span>root<span style="color: #66cc66;">-</span>with<span style="color: #66cc66;">-</span>t<span style="color: #66cc66;">-</span>average<span style="color: #66cc66;">-</span>damps x n <span style="color: #66cc66;">&#40;</span>minimal<span style="color: #66cc66;">-</span><span style="color: #b1b100;">t</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.46</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iterative<span style="color: #66cc66;">-</span>improve guess improve good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough? guess<span style="color: #66cc66;">&#41;</span>
      guess
      <span style="color: #66cc66;">&#40;</span>iterative<span style="color: #66cc66;">-</span>improve <span style="color: #66cc66;">&#40;</span>improve guess<span style="color: #66cc66;">&#41;</span> improve good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>improve y<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> x <span style="color: #66cc66;">&#40;</span>square y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough? y<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> tolerance <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span>square y<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iterative<span style="color: #66cc66;">-</span>improve <span style="color: #cc66cc;">1.0</span> improve good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fixed<span style="color: #66cc66;">-</span>point <span style="color: #b1b100;">f</span> first<span style="color: #66cc66;">-</span>guess<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>improve x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough? x<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> tolerance <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iterative<span style="color: #66cc66;">-</span>improve first<span style="color: #66cc66;">-</span>guess improve good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0%ef%bc%88%e4%b8%8b%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SICP习题解答：第一章（上）</title>
		<link>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0/</link>
		<comments>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 15:00:18 +0000</pubDate>
		<dc:creator>tianyi</dc:creator>
				<category><![CDATA[程序园]]></category>
		<category><![CDATA[习题]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://cuitianyi.com/blog/?p=395</guid>
		<description><![CDATA[
?View Code SCHEME;; 1.1-2 略
&#160;
;; 1.3
&#40;define &#40;greater-two a b c&#41;
  &#40;-
   &#40;+ a b c&#41;
   &#40;min a b c&#41;&#41;&#41;
; 或
&#40;define &#40;greater-two a b c&#41;
  &#40;cond &#40;&#40;and &#40;&#62; b a&#41; &#40;&#62; c a&#41;&#41;
         &#40;+ b c&#41;&#41;
       [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p395code6'); return false;">View Code</a> SCHEME</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p3956"><td class="code" id="p395code6"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 1.1-2 略</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.3</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>greater<span style="color: #66cc66;">-</span>two a b c<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span>
   <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a b c<span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">min</span> a b c<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">; 或</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>greater<span style="color: #66cc66;">-</span>two a b c<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> b a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> c a<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> b c<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> a b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> c b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a c<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.4 (if (&gt; b 0) + -) 根据b的正负性返回函数+或-。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.5 函数p的定义 (define (p) (p)) 是不断递归调用自己，所以欲对其进行求值/展开会产生死循环。调用 (test 0 (p)) 时，若采用应用序求值，会先对函数的参数，包括 (p) 求值，因而产生死循环，无法输出结果；若采用正则序求值，则由于 (p) 的值事实上不会被展开，故会正常返回0。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.6 将在调用函数 new-if 时，应用序要求先算出其所有参数的值，new-if 的后两个参数——代表 if 的两个分支的代码都将被执行。所以 (sqrt-iter guess x) 必然需要调用 (sqrt-iter (improve guess x) x)，这导致死循环。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.7</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">sqrt</span> x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sqrt<span style="color: #66cc66;">-</span>iter guess<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> guess guess<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0.001</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>improve<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>average a b<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a b<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>average guess <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> x guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span>
        guess
        <span style="color: #66cc66;">&#40;</span>sqrt<span style="color: #66cc66;">-</span>iter <span style="color: #66cc66;">&#40;</span>improve<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>sqrt<span style="color: #66cc66;">-</span>iter <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.8</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>cube<span style="color: #66cc66;">-</span>root x<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter guess<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> guess guess<span style="color: #66cc66;">&#41;</span> guess<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0.001</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>improve<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">/</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> guess guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> guess<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>good<span style="color: #66cc66;">-</span>enough?<span style="color: #66cc66;">&#41;</span>
        guess
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>improve<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.9 第一个过程是递归的，表达式被递归地逐渐展开再合并；第二个过程中的递归是尾递归，不妨理解为迭代的。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.10 (f n)是n的2倍，(g n)是2的n次方，(h n)是2的(h (- n 1))次方。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.11</span>
<span style="color: #808080; font-style: italic;">; 递归方式</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> n
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; 迭代方式</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter a b c i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i n<span style="color: #66cc66;">&#41;</span> c
        <span style="color: #66cc66;">&#40;</span>iter b c
              <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span> a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> b<span style="color: #66cc66;">&#41;</span> c<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> n <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> n
      <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.12</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>C n i<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #cc66cc;">1</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>C <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>C <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.13 可利用归纳法和定义直接证。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.14 空间复杂度为 O(amount)，因为任何时刻调用链的长度（栈上的函数数量）不超过 amount+1；时间复杂度为 O(amount * result)，因为每得到一种方案都调用一次 (cc 0 kinds-of-coins)。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.15 空间与时间复杂度均为O(log a)。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.16 prod*a^m是不变量。</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span><span style="color: #b1b100;">expt</span> b n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter prod a m<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> m<span style="color: #66cc66;">&#41;</span> prod
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> m <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>iter prod <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> m <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> prod a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a a<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> m <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">1</span> b n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.17</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span>multi a b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> a<span style="color: #66cc66;">&#41;</span> b
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> a <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>double <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span>multi <span style="color: #66cc66;">&#40;</span>halve a<span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> b <span style="color: #66cc66;">&#40;</span>double <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span>multi <span style="color: #66cc66;">&#40;</span>halve <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> a <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.18</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>fast<span style="color: #66cc66;">-</span>multi a b<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter sum i n<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> n<span style="color: #66cc66;">&#41;</span> sum
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>iter sum <span style="color: #66cc66;">&#40;</span>double i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>halve n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> sum i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>double i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>halve <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">0</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.19 p’ = pp + qq，q’ = qq + 2pq。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.20 应用序需要4次；正则序需要更多，没仔细数，因为gcd函数体中出现了三处b，当b是调用remainder的形式时，它需要被展开若干次。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.21 略。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.22-24 我用的DrScheme没有定义runtime……555</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.25 如果不在计算乘幂时随时取模，每次乘法将由于被乘数位数的迅速增长而不能被看做单位时间的原子操作。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.26 每次(expmod base exp m)当exp为正偶数时会调用两次而非一次(expmod base exp m)，f(N)=2*f(N/2)+Θ(1)导致f(N)=Θ(N)，而原始版本的f(N)=f(N/2)+Θ(1)导致f(N)=Θ(log N)。</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.27 以下程序中，(find-carmichael n)找出不超过n的Carmichael数</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>prime? n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;</span> <span style="color: #66cc66;">&#40;</span>square i<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span> true<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> n i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> false<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>carmichael? n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i n<span style="color: #66cc66;">&#41;</span> true<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i <span style="color: #66cc66;">&#40;</span>expmod i n n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> false<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span>prime? n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>find<span style="color: #66cc66;">-</span>carmichael n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>iter i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>carmichael? i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> i<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> i n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 1.28</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>miller<span style="color: #66cc66;">-</span>rabin n<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>exp<span style="color: #66cc66;">-</span>iter prod base <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">1</span> prod<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> prod <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> prod prod<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> prod<span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">even?</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
                    <span style="color: #66cc66;">&#40;</span>exp<span style="color: #66cc66;">-</span>iter
                     prod
                     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> base base<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #b1b100;">exp</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                    <span style="color: #66cc66;">&#40;</span>exp<span style="color: #66cc66;">-</span>iter
                     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> prod base<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> base base<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span>
                     <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> <span style="color: #b1b100;">exp</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>check i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>exp<span style="color: #66cc66;">-</span>iter <span style="color: #cc66cc;">1</span> i <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>check<span style="color: #66cc66;">-</span>iter i<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> i <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> true<span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>check <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span>random <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                    <span style="color: #66cc66;">&#40;</span>check<span style="color: #66cc66;">-</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> i <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> false<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">or</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">2</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">3</span> n<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #cc66cc;">2</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> n <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>check<span style="color: #66cc66;">-</span>iter <span style="color: #cc66cc;">20</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://cuitianyi.com/blog/sicp%e4%b9%a0%e9%a2%98%e8%a7%a3%e7%ad%94%ef%bc%9a%e7%ac%ac%e4%b8%80%e7%ab%a0/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>最近在学的东西</title>
		<link>http://cuitianyi.com/blog/%e6%9c%80%e8%bf%91%e5%9c%a8%e5%ad%a6%e7%9a%84%e4%b8%9c%e8%a5%bf/</link>
		<comments>http://cuitianyi.com/blog/%e6%9c%80%e8%bf%91%e5%9c%a8%e5%ad%a6%e7%9a%84%e4%b8%9c%e8%a5%bf/#comments</comments>
		<pubDate>Wed, 24 Oct 2007 10:43:33 +0000</pubDate>
		<dc:creator>tianyi</dc:creator>
				<category><![CDATA[生活志]]></category>
		<category><![CDATA[CET4]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://tianyi.yo2.cn/%e6%9c%80%e8%bf%91%e5%9c%a8%e5%ad%a6%e7%9a%84%e4%b8%9c%e8%a5%bf/</guid>
		<description><![CDATA[在看 SICP 学 Scheme，深深体会到函数式语言的神奇。
在学习一些 Emacs 扩展的使用，例如 EmacsMuse。
背 CET4 单词……
看一些基础的物理奥赛。（我的输入法刚才说“无聊赛”）
阅读杨伯峻《论语译注》和钱穆《论语新解》。（书已订，还未开始读）
做一点点 NOIP 难度的题目，打算写一份 DP 总结，暂定名为《解动态规划题的基本思考方式》。
]]></description>
			<content:encoded><![CDATA[<p>在看 <a href="http://mitpress.mit.edu/sicp/">SICP</a> 学 Scheme，深深体会到函数式语言的神奇。</p>
<p>在学习一些 Emacs 扩展的使用，例如 <a href="http://mwolson.org/projects/EmacsMuse.html">EmacsMuse</a>。</p>
<p>背 CET4 单词……</p>
<p>看一些基础的物理奥赛。（我的输入法刚才说“无聊赛”）</p>
<p>阅读杨伯峻《论语译注》和钱穆《论语新解》。（书已订，还未开始读）</p>
<p>做一点点 NOIP 难度的题目，打算写一份 DP 总结，暂定名为《解动态规划题的基本思考方式》。</p>
]]></content:encoded>
			<wfw:commentRss>http://cuitianyi.com/blog/%e6%9c%80%e8%bf%91%e5%9c%a8%e5%ad%a6%e7%9a%84%e4%b8%9c%e8%a5%bf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
