<?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>CS Musings</title>
	<atom:link href="http://cs.mu/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://cs.mu</link>
	<description></description>
	<lastBuildDate>Tue, 25 May 2010 05:34:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Installing CouchDB 0.11 on Ubuntu 10.4 Lucid</title>
		<link>http://cs.mu/?p=20</link>
		<comments>http://cs.mu/?p=20#comments</comments>
		<pubDate>Tue, 25 May 2010 05:34:23 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://cs.mu/?p=20</guid>
		<description><![CDATA[After much soul-searching, I&#8217;ve finally figured out the full script for setting up couchdb from source on a newly minted Ubuntu 10.4 Lucid image on linode (should work elsewhere). Some notes: this shell script is my first attempt at one, so it doesn&#8217;t have anything other than a list of commands. I tried to put [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.5em; padding: 0px;">After much soul-searching, I&#8217;ve finally figured out the full script for setting up couchdb from source on a newly minted Ubuntu 10.4 Lucid image on linode (should work elsewhere).</p>
<p>Some notes:<br style="line-height: 1.4em; padding: 0px; margin: 0px;" /></p>
<ul>
<li>this shell script is my first attempt at one, so it doesn&#8217;t have anything other than a list of commands. I tried to put 1.9.2.3 (version number of xulrunner) in a variable, but that failed as well. So if anyone can help me improve it, it would be much appreciated!</li>
<li>to use it, download the latest source (0.11 at the time of writing), extract it (tar -xzf name-here), and drop the shell script into the root folder.</li>
</ul>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 1.5em; padding: 0px;">The sources/inspiration for this scheme is as follows:<br style="line-height: 1.4em; padding: 0px; margin: 0px;" /><a style="line-height: 1.4em; color: #4183c4; text-decoration: none; outline-style: none; outline-width: initial; outline-color: initial; padding: 0px; margin: 0px;" href="http://wiki.apache.org/couchdb/Installing_on_Ubuntu">http://wiki.apache.org/couchdb/Installing_on_Ubuntu</a> &#8211; official wiki, but the instructions are misleading and incomplete, you need to do a lot of other directory stuff just to get it running.<br style="line-height: 1.4em; padding: 0px; margin: 0px;" /><a style="line-height: 1.4em; color: #4183c4; text-decoration: none; outline-style: none; outline-width: initial; outline-color: initial; padding: 0px; margin: 0px;" href="http://depth-first.com/articles/2010/01/28/pubcouch-install-couchdb-on-ubuntu-karmic-from-source">http://depth-first.com/articles/2010/01/28/pubcouch-install-couchdb-on-ubuntu-karmic-from-source</a> &#8211; this is generally very complete, but dated for lucid. In particular, libmozjs-dev is no longer available, replaced with xulrunner, as per instruction in the official wiki.</p>
<p><script src="http://gist.github.com/412801.js?file=couchdb-setup"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=20</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bash History Command</title>
		<link>http://cs.mu/?p=17</link>
		<comments>http://cs.mu/?p=17#comments</comments>
		<pubDate>Fri, 30 Oct 2009 18:55:19 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://intricate.nfshost.com/?p=17</guid>
		<description><![CDATA[Recently I came across an idea to more effectively search through the history of commands I typed. I already know about the up arrow will revisit the history in reverse chronological order. However, I would like to have a better way of searching for the command I typed. Typing CTRL-r would give you a prompt [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I came across an idea to more effectively search through the history of commands I typed. I already know about the up arrow will revisit the history in reverse chronological order. However, I would like to have a better way of searching for the command I typed.</p>
<p>Typing CTRL-r would give you a prompt and you can start typing in commands you already entered and it will search through the history and find the most recent command fit the description already provided. Very useful for long command you typed recently and do not want to type them out again.</p>
<p>Another thing I have found is putting HISTCONTRL=erasedups in your ~/.bashrc, it will prevent any duplicates from appearing in the history file and therefore allow for more space to put more commands.</p>
]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exercise 4-2</title>
		<link>http://cs.mu/?p=16</link>
		<comments>http://cs.mu/?p=16#comments</comments>
		<pubDate>Fri, 03 Jul 2009 20:52:08 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Erlang Programming (2009)]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=13</guid>
		<description><![CDATA[This particular problem comes from the book Erlang Programming published in 2009 by O&#8217;reilly, it is the ring message problem (ring.erl). It took me a while to do this problem because this is my first foray into concurrency, and I&#8217;m not used to the way they pass information around (always tries to pass information in [...]]]></description>
			<content:encoded><![CDATA[<p>This particular problem comes from the book Erlang Programming published in 2009 by O&#8217;reilly, it is the ring message problem (ring.erl).</p>
<p>It took me a while to do this problem because this is my first foray into concurrency, and I&#8217;m not used to the way they pass information around (always tries to pass information in function parameters). However, after a few failed iterations, this is my solution. It is not as elegant as some of the solution online, and the best one I&#8217;ve seen uses foldr to shorten the program.</p>
<p>If there is any questions/problems regarding my code, please don&#8217;t hesitate and ask in the comments!</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;"><span style="color: #014ea4;">-</span><span style="color: #5400b3;">module</span><span style="color: #109ab8;">&#40;</span>ring<span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #014ea4;">-</span><span style="color: #5400b3;">export</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#91;</span>start<span style="color: #014ea4;">/</span><span style="color: #ff9600;">3</span><span style="color: #6bb810;">,</span> construct<span style="color: #014ea4;">/</span><span style="color: #ff9600;">4</span><span style="color: #6bb810;">,</span> loop<span style="color: #014ea4;">/</span><span style="color: #ff9600;">2</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #ff3c00;">start</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">N</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;~p Testing ~p~n&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #ff3c00;">self</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
	<span style="color: #ff3c00;">spawn</span><span style="color: #109ab8;">&#40;</span>ring<span style="color: #6bb810;">,</span> construct<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span>true<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">N</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #ff3c00;">construct</span><span style="color: #109ab8;">&#40;</span>true<span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Count</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #45b3e6;">Pid</span> <span style="color: #014ea4;">=</span> <span style="color: #ff3c00;">spawn</span><span style="color: #109ab8;">&#40;</span>ring<span style="color: #6bb810;">,</span> construct<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #ff3c00;">self</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Count</span><span style="color: #014ea4;">-</span><span style="color: #ff9600;">1</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
	<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Pid</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
&nbsp;
<span style="color: #ff3c00;">construct</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #ff9600;">0</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">_</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span> <span style="color: #45b3e6;">First</span> <span style="color: #014ea4;">!</span> <span style="color: #45b3e6;">Msg</span><span style="color: #6bb810;">;</span>
&nbsp;
<span style="color: #ff3c00;">construct</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #ff9600;">1</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #ff3c00;">spawn</span><span style="color: #109ab8;">&#40;</span>ring<span style="color: #6bb810;">,</span> construct<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #ff9600;">0</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
	<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">;</span>
&nbsp;
<span style="color: #ff3c00;">construct</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Count</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #45b3e6;">Pid</span> <span style="color: #014ea4;">=</span> <span style="color: #ff3c00;">spawn</span><span style="color: #109ab8;">&#40;</span>ring<span style="color: #6bb810;">,</span> construct<span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #45b3e6;">First</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Count</span><span style="color: #014ea4;">-</span><span style="color: #ff9600;">1</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
	<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Pid</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Next</span><span style="color: #6bb810;">,</span> <span style="color: #ff9600;">0</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;~p Stopping~n&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #ff3c00;">self</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
	<span style="color: #45b3e6;">Next</span> <span style="color: #014ea4;">!</span> stop<span style="color: #6bb810;">;</span>
&nbsp;
<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Next</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
	<span style="color: #186895;">receive</span>
		stop <span style="color: #6bb810;">-&gt;</span>
			<span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;~p Stopping Abornomally~n&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #ff3c00;">self</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
			true<span style="color: #6bb810;">;</span>
		<span style="color: #45b3e6;">Msg</span> <span style="color: #6bb810;">-&gt;</span>
			<span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;~p Received ~p~n&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #ff3c00;">self</span><span style="color: #109ab8;">&#40;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">Msg</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
			<span style="color: #45b3e6;">Next</span> <span style="color: #014ea4;">!</span> <span style="color: #45b3e6;">Msg</span><span style="color: #6bb810;">,</span>
			<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">Next</span><span style="color: #6bb810;">,</span> <span style="color: #45b3e6;">M</span><span style="color: #014ea4;">-</span><span style="color: #ff9600;">1</span><span style="color: #109ab8;">&#41;</span>
	<span style="color: #186895;">end</span><span style="color: #6bb810;">.</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Section 3.1</title>
		<link>http://cs.mu/?p=9</link>
		<comments>http://cs.mu/?p=9#comments</comments>
		<pubDate>Mon, 25 Aug 2008 23:00:30 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=9</guid>
		<description><![CDATA[I have skipped two sections on data-directed programming and generic operations. I have read through most of the texts, but I did not do any exercises for them, it seems boring enough that when I have more time in the future (or when I need the knowledge), I will come back and do the exercises. [...]]]></description>
			<content:encoded><![CDATA[<p>I have skipped two sections on data-directed programming and generic operations. I have read through most of the texts, but I did not do any exercises for them, it seems boring enough that when I have more time in the future (or when I need the knowledge), I will come back and do the exercises.</p>
<p>I hope I will not skip anymore sections in the future.</p>
<p>Here are my solutions to section 3.1:</p>
<h4>Exercise 3.1</h4>
<p>This exercise should be quite simple as long as you understands the examples outlined before.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.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>accumulator init<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;">set!</span> init <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> init x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    init<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;3.1&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> A <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>accumulator <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>A <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>A <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.2</h4>
<p>This exercise is basically a modification to 3.1 with care and attention to the return value of the function.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.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>monitored fun<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> calls <span style="color: #cc66cc;">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>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;">equal?</span> x 'how<span style="color: #66cc66;">-</span>many<span style="color: #66cc66;">-</span>calls?<span style="color: #66cc66;">&#41;</span>
        calls
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> calls <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> calls <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>fun 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: #ff0000;">&quot;3.2&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #b1b100;">s</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>monitored <span style="color: #b1b100;">sqrt</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">s</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">s</span> 'how<span style="color: #66cc66;">-</span>many<span style="color: #66cc66;">-</span>calls?<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.3</h4>
<p>Some thought (or not) should tell you that only dispatch needs modification, and that is the bottleneck in which all of the request are directed, so as to remove the need to modify every transaction function. One note, I made the wrong-pass function take in one parameter because of a need to return a function that takes in one parameter. Since error cannot be used because there could be more actions with the correct password following it, this is the minimal change action.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>account balance password<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>withdraw amount<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> balance amount<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
               balance<span style="color: #66cc66;">&#41;</span>
        <span style="color: #ff0000;">&quot;Insufficient funds&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>deposit amount<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    balance<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>wrong<span style="color: #66cc66;">-</span>pass any<span style="color: #66cc66;">&#41;</span>
    <span style="color: #ff0000;">&quot;Incorrect Password&quot;</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>dispatch pass 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: #b1b100;">eq?</span> pass password<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;">eq?</span> m 'withdraw<span style="color: #66cc66;">&#41;</span> withdraw<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> m 'deposit<span style="color: #66cc66;">&#41;</span> deposit<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;Unknown request -- MAKE-ACCOUNT&quot;</span> m<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        wrong<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  dispatch<span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #ff0000;">&quot;3.3&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> acc <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>account <span style="color: #cc66cc;">100</span> 'secret<span style="color: #66cc66;">-</span>password<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'secret<span style="color: #66cc66;">-</span>password 'withdraw<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">40</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.4</h4>
<p>This exercise is a simple change to 3.3, same rationale for call-the-cops function taking in one parameter.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.4</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>account balance password<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> cop<span style="color: #66cc66;">-</span>counter <span style="color: #cc66cc;">0</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>withdraw amount<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> balance amount<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
               balance<span style="color: #66cc66;">&#41;</span>
        <span style="color: #ff0000;">&quot;Insufficient funds&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>deposit amount<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    balance<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>wrong<span style="color: #66cc66;">-</span>pass any<span style="color: #66cc66;">&#41;</span>
    <span style="color: #ff0000;">&quot;Incorrect Password&quot;</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>call<span style="color: #66cc66;">-</span>the<span style="color: #66cc66;">-</span>cops any<span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;calling cops&quot;</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>dispatch pass m<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
      <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> pass password<span style="color: #66cc66;">&#41;</span>
       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> cop<span style="color: #66cc66;">-</span>counter <span style="color: #cc66cc;">0</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;">eq?</span> m 'withdraw<span style="color: #66cc66;">&#41;</span> withdraw<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> m 'deposit<span style="color: #66cc66;">&#41;</span> deposit<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;Unknown request -- MAKE-ACCOUNT&quot;</span> m<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
      <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span>
       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> cop<span style="color: #66cc66;">-</span>counter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> cop<span style="color: #66cc66;">-</span>counter <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: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&gt;=</span> cop<span style="color: #66cc66;">-</span>counter <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span>
           call<span style="color: #66cc66;">-</span>the<span style="color: #66cc66;">-</span>cops
           wrong<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  dispatch<span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;3.4&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> acc <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>account <span style="color: #cc66cc;">100</span> 'secret<span style="color: #66cc66;">-</span>password<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'secret<span style="color: #66cc66;">-</span>password 'withdraw<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">40</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>acc 'some<span style="color: #66cc66;">-</span>other<span style="color: #66cc66;">-</span>password 'deposit<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.5</h4>
<p>I took Eli&#8217;s advice and changed the random-in-range function so it accepts in-exact numbers. Mainly due to plt-scheme&#8217;s insistence on being precise whenever possible, such as using fractions when I want decimals.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.5</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>random<span style="color: #66cc66;">-</span>in<span style="color: #66cc66;">-</span>range low high<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;">&#91;</span>range <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> high low<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> low <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>random<span style="color: #66cc66;">&#41;</span> range<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>monte<span style="color: #66cc66;">-</span>carlo trials experiment<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 trials<span style="color: #66cc66;">-</span>remaining trials<span style="color: #66cc66;">-</span>passed<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> trials<span style="color: #66cc66;">-</span>remaining <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> trials<span style="color: #66cc66;">-</span>passed trials<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>experiment<span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> trials<span style="color: #66cc66;">-</span>remaining <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> trials<span style="color: #66cc66;">-</span>passed <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;">else</span>
           <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> trials<span style="color: #66cc66;">-</span>remaining <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> trials<span style="color: #66cc66;">-</span>passed<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 trials <span style="color: #cc66cc;">0</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>estimate<span style="color: #66cc66;">-</span>integral p x1 x2 y1 y2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>ei<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>p <span style="color: #66cc66;">&#40;</span>random<span style="color: #66cc66;">-</span>in<span style="color: #66cc66;">-</span>range x1 x2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>random<span style="color: #66cc66;">-</span>in<span style="color: #66cc66;">-</span>range y1 y2<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;">&#91;</span>trials <span style="color: #cc66cc;">1000000</span><span style="color: #66cc66;">&#93;</span>
         <span style="color: #66cc66;">&#91;</span>success <span style="color: #66cc66;">&#40;</span>monte<span style="color: #66cc66;">-</span>carlo trials ei<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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> x2 x1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> y2 y1<span style="color: #66cc66;">&#41;</span> success<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>unit<span style="color: #66cc66;">-</span>circle x y<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: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> y y<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>
&nbsp;
<span style="color: #ff0000;">&quot;3.5&quot;</span>
<span style="color: #66cc66;">&#40;</span>estimate<span style="color: #66cc66;">-</span>integral unit<span style="color: #66cc66;">-</span>circle <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1.0</span> <span style="color: #cc66cc;">1.0</span> <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1.0</span> <span style="color: #cc66cc;">1.0</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.6</h4>
<p>This question is simple if you look through the scheme documentation and find random-seed. random-seed basically seeds the random generator with the value specified.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.6</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>rand symb<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> symb 'generate<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>random<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> symb 'reset<span style="color: #66cc66;">&#41;</span> random<span style="color: #66cc66;">-</span>seed<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;3.6&quot;</span>
<span style="color: #66cc66;">&#40;</span>rand 'generate<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>rand 'reset<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>rand 'generate<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>rand 'generate<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>rand 'reset<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>rand 'generate<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>rand 'generate<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.7</h4>
<p>For this exercise, it could be simple if it does not have the requirement that make-joint should fail when the second argument is not the correct password. If it does not have that requirement, then there is no need to modify the make-account function at all. Since it has that, I added a way to check the account password into the make-account from 3.3.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.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>account balance password<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>withdraw amount<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> balance amount<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
               balance<span style="color: #66cc66;">&#41;</span>
        <span style="color: #ff0000;">&quot;Insufficient funds&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>deposit amount<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> balance <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> balance amount<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    balance<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>wrong<span style="color: #66cc66;">-</span>pass any<span style="color: #66cc66;">&#41;</span>
    <span style="color: #ff0000;">&quot;Incorrect Password&quot;</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>pass pass<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> pass password<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>dispatch pass 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: #b1b100;">eq?</span> m 'check<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span>
        check<span style="color: #66cc66;">-</span>pass
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> pass password<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;">eq?</span> m 'withdraw<span style="color: #66cc66;">&#41;</span> withdraw<span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> m 'deposit<span style="color: #66cc66;">&#41;</span> deposit<span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;Unknown request -- MAKE-ACCOUNT&quot;</span> m<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
            wrong<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    dispatch<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>joint acc orig<span style="color: #66cc66;">-</span>pass new<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>wrong<span style="color: #66cc66;">-</span>pass any<span style="color: #66cc66;">&#41;</span>
    <span style="color: #ff0000;">&quot;Incorrect Password&quot;</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;">&#40;</span>acc orig<span style="color: #66cc66;">-</span>pass 'check<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span> orig<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>pass 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: #b1b100;">eq?</span> pass new<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>acc orig<span style="color: #66cc66;">-</span>pass m<span style="color: #66cc66;">&#41;</span>
            wrong<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      wrong<span style="color: #66cc66;">-</span>pass<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #ff0000;">&quot;3.7&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> peter<span style="color: #66cc66;">-</span>acc <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>account <span style="color: #cc66cc;">100</span> 'open<span style="color: #66cc66;">-</span>sesame<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>peter<span style="color: #66cc66;">-</span>acc 'open<span style="color: #66cc66;">-</span>sesame 'withdraw<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">40</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> paul<span style="color: #66cc66;">-</span>acc
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>joint peter<span style="color: #66cc66;">-</span>acc 'open<span style="color: #66cc66;">-</span>seasame 'rosebud<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>paul<span style="color: #66cc66;">-</span>acc 'rosebud 'withdraw<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">40</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 3.8</h4>
<p>This question took me a while to get simple enough. Basically, the question asks you to flip a switch on the first pass and return 0 on the second pass, thus yield the result. For example, if evaulated from right to left, question asks (+ (f 0) (f 1)) to return 1. From my understanding, it is asking for a function f that when it pass over (f 1), it sets a state variable to 1, and then when it pass over (f 0), it returns 0. Same logic goes for the other way. Another note is how to test the program, we can force the excution one way or another by seperating out the function calls. If we want to evalulate (f 1) first, we just put it before (f 0).</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 3.8</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #b1b100;">f</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>state <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</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;">cond</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> state <span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">set!</span> state x<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</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: #ff0000;">&quot;3.8&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">f</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=9</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SICP 2.3</title>
		<link>http://cs.mu/?p=8</link>
		<comments>http://cs.mu/?p=8#comments</comments>
		<pubDate>Thu, 21 Aug 2008 05:41:07 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=8</guid>
		<description><![CDATA[This will be the first section that I will post as I work through it. My hope from this point on is to complete one section per two day, see how that works out. Skipped: 2.65, 2.71, 2.72 Without further ado, here is the first question: Exercise 2.53: For this exercise, just need to plug [...]]]></description>
			<content:encoded><![CDATA[<p>This will be the first section that I will post as I work through it. My hope from this point on is to complete one section per two day, see how that works out.</p>
<p>Skipped: 2.65, 2.71, 2.72</p>
<p>Without further ado, here is the first question:</p>
<h4>Exercise 2.53:</h4>
<p>For this exercise, just need to plug the expressions into a scheme interpreter and see what is the result.</p>
<h4>Exercise 2.54:</h4>
<p>This exercise is simple in that the book gave the algorithm to the reader already and all that is left to do is to implement the algorithm.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.54</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;">equal?</span> obj1 obj2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</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><span style="color: #b1b100;">pair?</span> obj1<span style="color: #66cc66;">&#41;</span><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;">pair?</span> obj2<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;">eq?</span> obj1 obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> obj1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> obj2<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>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> obj1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> obj1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> #f<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;2.54 - my-equal?&quot;</span>
<span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> '<span style="color: #66cc66;">&#40;</span>this is a <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span>this is a <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>my<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> '<span style="color: #66cc66;">&#40;</span>this is a <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span>this <span style="color: #66cc66;">&#40;</span>is a<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.54:</h4>
<p>This one is slightly more tricky, due to the fact that I do not think that the book explained how quoting worked exactly in the implementation. It only shows the &#8216;(elements&#8230;) syntax, but in fact it is just syntactical sugar for a more basic syntax (quote elements&#8230;). After realizing that, it is a simple matter of expanding the given expression: (car &#8221;abracadabra) -&gt; (car (quote &#8216;abracadabra)) -&gt; (car (quote (quote abracadabra))) -&gt; (car &#8216;(quote abracadabra)) -&gt; &#8216;quote</p>
<h3>Symbolic Differentiation</h3>
<p>Now we get into a meaty project in the book. By the end of the next 3 exercises, you will have implemented a reasonable symbolic differentiator.</p>
<p>The following is the code given in the book right before the first exercise, for each exercise, I will use these pre-existing code as a base and redefining functions as needed.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; Symbolic Differentiation</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>variable? x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">symbol?</span> x<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>same<span style="color: #66cc66;">-</span>variable? v1 v2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span>variable? v1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>variable? v2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> v1 v2<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>sum? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">+</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>addend <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> <span style="color: #b1b100;">s</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>augend <span style="color: #b1b100;">s</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">caddr</span> <span style="color: #b1b100;">s</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>product? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">*</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>multiplier p<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> p<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>multiplicand p<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">caddr</span> p<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: #66cc66;">=</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">exp</span> num<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;">number?</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #b1b100;">exp</span> num<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>make<span style="color: #66cc66;">-</span>sum a1 a2<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><span style="color: #b1b100;">number?</span> a1 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> a2<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: #b1b100;">number?</span> a2 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> a1<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: #b1b100;">number?</span> a1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> a2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a1 a2<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: #66cc66;">+</span> a1 a2<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>make<span style="color: #66cc66;">-</span>product m1 m2<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><span style="color: #b1b100;">number?</span> m1 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> m2 <span style="color: #cc66cc;">0</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: #b1b100;">number?</span> m1 <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> m2<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: #b1b100;">number?</span> m2 <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> m1<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: #b1b100;">number?</span> m1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> m2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> m1 m2<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: #66cc66;">*</span> m1 m2<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>deriv <span style="color: #b1b100;">exp</span> var<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>variable? <span style="color: #b1b100;">exp</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>same<span style="color: #66cc66;">-</span>variable? <span style="color: #b1b100;">exp</span> var<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>sum? <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>sum <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>addend <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>augend <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>product? <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>sum
          <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product <span style="color: #66cc66;">&#40;</span>multiplier <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>multiplicand <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>multiplier <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>multiplicand <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span>
         <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;unknown expression type -- DERIV&quot;</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;SD - Example&quot;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> x <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> 'x<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x y<span style="color: #66cc66;">&#41;</span> 'x<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x y<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> x <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 'x<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.56:</h4>
<p>This exercise tests the reader&#8217;s understanding of the code given and his ability to extend the code. It is quite simple as long as you understand how each component fits together. Also you have to understand the purpose of the helper functions and learn to compose your own as needs arise. One extra function I have defined other than those specified in the problem description is make-subtraction. Since you need to do subtraction in the result as a general function.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.56</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>exponentiation? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">**</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>make<span style="color: #66cc66;">-</span>exponentiation b <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">expt</span> b <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> '<span style="color: #66cc66;">**</span> b <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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>base 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>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>exponent 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>
&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>subtraction x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> y <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> '<span style="color: #66cc66;">-</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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>deriv <span style="color: #b1b100;">exp</span> var<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>variable? <span style="color: #b1b100;">exp</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>same<span style="color: #66cc66;">-</span>variable? <span style="color: #b1b100;">exp</span> var<span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>sum? <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>sum <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>addend <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>augend <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>product? <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>sum
          <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product <span style="color: #66cc66;">&#40;</span>multiplier <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>multiplicand <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>multiplier <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span>multiplicand <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>exponentiation? <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product
          <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>product
           <span style="color: #66cc66;">&#40;</span>exponent <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
           <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>exponentiation <span style="color: #66cc66;">&#40;</span>base <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span>
                                <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>subtraction <span style="color: #66cc66;">&#40;</span>exponent <span style="color: #b1b100;">exp</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><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>deriv <span style="color: #66cc66;">&#40;</span>base <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span> var<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span>
         <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;unknown expression type -- DERIV&quot;</span> <span style="color: #b1b100;">exp</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;2.56&quot;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">**</span> x <span style="color: #cc66cc;">6</span><span style="color: #66cc66;">&#41;</span> 'x<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>2.57</h4>
<p>At this point, the author is trying to show the power of abstraction, by making modification to helper functions, we can keep the core of the program (deriv function) unchanged. This point is driven further in the subsequent exercise.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.57</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>augend 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;">null?</span> <span style="color: #66cc66;">&#40;</span>cdddr x<span style="color: #66cc66;">&#41;</span><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;">&#40;</span><span style="color: #b1b100;">cons</span> '<span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>cddr 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: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>multiplicand 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;">null?</span> <span style="color: #66cc66;">&#40;</span>cdddr x<span style="color: #66cc66;">&#41;</span><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;">&#40;</span><span style="color: #b1b100;">cons</span> '<span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>cddr 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: #ff0000;">&quot;2.57&quot;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> x y <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> x <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> 'x<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.58 a</h4>
<p>This exercise is quite easy when you think about it. The simplicity arise from the restriction that the input is always fully parenthesized. We pretty much just have to change the first selector as illustrated in the following example: in the prefix syntax, we have (+ x y), to handle infix form, we switch the places of the + and the x, to (x + y), so we just need to switch the corresponding functions which are sum?, product? &#8230;.. addend, multiplier&#8230;. To be consistent (and making sure that the output from this modification will feed into the input of the same deriv function), we also change all the make-* functions to reflect the infix form.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.58</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>addend <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>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>multiplier 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>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sum? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">+</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>product? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">*</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>exponentiation? x<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> x<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">**</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>base 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>
&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>exponentiation b <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> b<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">expt</span> b <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> b '<span style="color: #66cc66;">**</span> <span style="color: #b1b100;">e</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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>make<span style="color: #66cc66;">-</span>sum a1 a2<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><span style="color: #b1b100;">number?</span> a1 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> a2<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: #b1b100;">number?</span> a2 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> a1<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: #b1b100;">number?</span> a1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> a2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a1 a2<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> a1 '<span style="color: #66cc66;">+</span> a2<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>make<span style="color: #66cc66;">-</span>product m1 m2<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><span style="color: #b1b100;">number?</span> m1 <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> m2 <span style="color: #cc66cc;">0</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: #b1b100;">number?</span> m1 <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> m2<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: #b1b100;">number?</span> m2 <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> m1<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: #b1b100;">number?</span> m1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> m2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> m1 m2<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> m1 '<span style="color: #66cc66;">*</span> m2<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>make<span style="color: #66cc66;">-</span>subtraction x y<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span><span style="color: #b1b100;">number?</span> y <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">and</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x '<span style="color: #66cc66;">-</span> y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;2.58 a&quot;</span>
<span style="color: #66cc66;">&#40;</span>deriv '<span style="color: #66cc66;">&#40;</span>x <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>y <span style="color: #66cc66;">*</span> <span style="color: #66cc66;">&#40;</span>x <span style="color: #66cc66;">+</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> 'x<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.58 b</h4>
<p>???</p>
<h3>Representing Sets</h3>
<h4>Exercise 2.59</h4>
<p>This exercise is a simple exercise making sure you are familiar with the inner workings of the list set representation. Note, I have taken the liberty to change false -&gt; #f and true -&gt; #t, to better suit my scheme environment.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.59</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x set<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> set<span style="color: #66cc66;">&#41;</span> #f<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">equal?</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> #t<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set<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>union<span style="color: #66cc66;">-</span>set set1 set2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set1<span style="color: #66cc66;">&#41;</span> set2<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set2<span style="color: #66cc66;">&#41;</span> set1<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set1<span style="color: #66cc66;">&#41;</span> set2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set1<span style="color: #66cc66;">&#41;</span> set2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</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><span style="color: #b1b100;">car</span> set1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set1<span style="color: #66cc66;">&#41;</span> set2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #ff0000;">&quot;2.59&quot;</span>
<span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</span> <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.60</h4>
<p>The implementation for element-of-set? and intersection-set did not change, they are just there for the purpose of completeness. However, both adjoin-set and union-set have been changed to one line and correspondingly much faster than previous. The down side is that due to duplicates, the worst case performance could be much worse than the non-duplicates version for the functions element-of-set? and intersection-set. Since the required element to find for element-of-set? could be located after a lot of duplicated entries.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.60</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x set<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> set<span style="color: #66cc66;">&#41;</span> #f<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">equal?</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> #t<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set<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>adjoin<span style="color: #66cc66;">-</span>set x set<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x set<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>union<span style="color: #66cc66;">-</span>set set1 set2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> set1 set2<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>intersection<span style="color: #66cc66;">-</span>set set1 set2<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: #b1b100;">null?</span> set1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</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>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set1<span style="color: #66cc66;">&#41;</span> set2<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> set1<span style="color: #66cc66;">&#41;</span>
               <span style="color: #66cc66;">&#40;</span>intersection<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set1<span style="color: #66cc66;">&#41;</span> set2<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>intersection<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set1<span style="color: #66cc66;">&#41;</span> set2<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: #ff0000;">&quot;2.60&quot;</span>
<span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? <span style="color: #cc66cc;">1</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</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;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set <span style="color: #cc66cc;">3</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</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;">&#40;</span>union<span style="color: #66cc66;">-</span>set '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</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;">&#40;</span>intersection<span style="color: #66cc66;">-</span>set '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.61</h4>
<p>This exercise should be very simple if you understand the implementation for element-of-set?</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.61</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>set x set<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</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> set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> set<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span>lt<span style="color: #808080; font-style: italic;">; x (car set)) (cons x set)]</span>
    <span style="color: #66cc66;">&#91;</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><span style="color: #b1b100;">car</span> set<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;2.61&quot;</span>
<span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set <span style="color: #cc66cc;">5</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</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></pre></div></div>

<h4>Exercise 2.62</h4>
<p>This exercise basically implements the merge part of mergesort, with one notable difference that there is no duplicates in this version.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.62</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set set1 set2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set1<span style="color: #66cc66;">&#41;</span> set2<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> set2<span style="color: #66cc66;">&#41;</span> set1<span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span>lt<span style="color: #808080; font-style: italic;">; (car set1) (car set2)) (cons (car set1) (union-set (cdr set1) set2))]</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set2<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> set1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set1<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</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><span style="color: #b1b100;">car</span> set2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set set1 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #ff0000;">&quot;2.62&quot;</span>
<span style="color: #66cc66;">&#40;</span>union<span style="color: #66cc66;">-</span>set '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">7</span> <span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</span> <span style="color: #cc66cc;">8</span> <span style="color: #cc66cc;">9</span> <span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.63</h4>
<p>Tracing through a recursive function is a pain to do if you are not used to it. Especially when tracing through a function you have not wrote yourself. Fortunately, there are libraries available hopefully for your scheme implementation to make this task easier. However, for the purpose of this exercise, its best if you can come up with an explanation of how it works just by looking at it. Here is my version for the two functions, I will show the trace for one example after each explanation, and later explain how the trace came about.<br />
tree->list-1: This one is simpler than the version 2 to trace through, simply because this is a straight recursive function, and by now, you should be very comfortable working with this kinds of function. What this function does is it converts the right branch first into a list, cons the current node onto the front and then append (O(n) time) the left branch onto the front. You may think this is just a straight translation of the code into English, but it is, there is no easy way to explain a recursive function by just thinking about it and remembering the recursive case and the base case. I can also mention the order in which it will convert the tree, it will convert from right to left, from bottom to top. So the rightmost and bottommost element will be the last element of the list, then comes the parent node, then the left child of the parent node. So on and so fourth.<br />
Here is a trace for the second tree in Figure 2.16:</p>
<pre>
|(tree->list-1 (3 (1 () ()) (7 (5 () ()) (9 () (11 () ())))))
| (tree->list-1 (1 () ()))
| |(tree->list-1 ())
| |()
| |(tree->list-1 ())
| |()
| (1)
| (tree->list-1 (7 (5 () ()) (9 () (11 () ()))))
| |(tree->list-1 (5 () ()))
| | (tree->list-1 ())
| | ()
| | (tree->list-1 ())
| | ()
| |(5)
| |(tree->list-1 (9 () (11 () ())))
| | (tree->list-1 ())
| | ()
| | (tree->list-1 (11 () ()))
| | |(tree->list-1 ())
| | |()
| | |(tree->list-1 ())
| | |()
| | (11)
| |(9 11)
| (5 7 9 11)
|(1 3 5 7 9 11)
</pre>
<p>tree->list-2: This function is (at least for me) much harder to comprehend. It turns out, this function converts the tree in exactly the same order as the first function, but does it much faster. The reason behind most of the difficulties for me is that this function is tail recursive, and I do not have as much experience working with them than purely recursive functions, but in general replacing append with their tail-recursive equivalents will yield better performance. What it does is very similar to the first version, but it does not spawn a separate recursive call to tree->list-2, and append the result. It carries the result of all the computation it did with it as a second argument to copy-to-list. As the function moves through the tree, consing the individual elements it meets into the result and carry that forward. Therefore it will move through the whole tree only once and will not need to repeat calculation as it did for tree-list-1.<br />
Here is a trace for copy-to-list for the same figure as above trace:</p>
<pre>
|(copy-to-list (3 (1 () ()) (7 (5 () ()) (9 () (11 () ())))) ())
| (copy-to-list (7 (5 () ()) (9 () (11 () ()))) ())
| |(copy-to-list (9 () (11 () ())) ())
| | (copy-to-list (11 () ()) ())
| | |(copy-to-list () ())
| | |()
| | (copy-to-list () (11))
| | (11)
| |(copy-to-list () (9 11))
| |(9 11)
| (copy-to-list (5 () ()) (7 9 11))
| |(copy-to-list () (7 9 11))
| |(7 9 11)
| (copy-to-list () (5 7 9 11))
| (5 7 9 11)
|(copy-to-list (1 () ()) (3 5 7 9 11))
| (copy-to-list () (3 5 7 9 11))
| (3 5 7 9 11)
|(copy-to-list () (1 3 5 7 9 11))
|(1 3 5 7 9 11)
</pre>
<p>Here is how I did the tracing in Dr Scheme 372:<br />
One thing you need to be careful when doing trace, it appears to not recognize functions defined in another function, so to trace copy-to-list, you need to take it out and make it a separate function.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; load the trace library</span>
<span style="color: #66cc66;">&#40;</span>require <span style="color: #66cc66;">&#40;</span>lib <span style="color: #ff0000;">&quot;trace.ss&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">;; tag the functions you would like to trace</span>
<span style="color: #66cc66;">&#40;</span>trace tree<span style="color: #66cc66;">-&gt;</span>list<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> copy<span style="color: #66cc66;">-</span>to<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">;; now run the functions</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> tree <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>tree <span style="color: #cc66cc;">3</span>
           <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>tree <span style="color: #cc66cc;">1</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</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>tree <span style="color: #cc66cc;">7</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>tree <span style="color: #cc66cc;">5</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</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>tree <span style="color: #cc66cc;">9</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>tree <span style="color: #cc66cc;">11</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</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>tree<span style="color: #66cc66;">-&gt;</span>list<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> tree<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>copy<span style="color: #66cc66;">-</span>to<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span> tree '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.64</h4>
<p>The first thing you should notice about this partial-tree function is that it has a lot of &#8220;let&#8221;. The reason upon closer inspection and perhaps some experimenting will revel that you cannot use the variable previously defined in the same let. For example, the following code is not allowed:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"> <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>size <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">quotient</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: #cc66cc;">2</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>result <span style="color: #66cc66;">&#40;</span>partial<span style="color: #66cc66;">-</span>tree elts left<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;">&#41;</span></pre></div></div>

<p>Since left-size has been defined in the same let, to use left-size, we have to introduce another nested let as shown in the book. By looking in the right place, we can eliminate most of the redundancy, the magical word is let*, an improved let which is defined basically with nested &#8220;let&#8221;s.<br />
We can therefore simplify the code to as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>partial<span style="color: #66cc66;">-</span>tree elts 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>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> elts<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>left<span style="color: #66cc66;">-</span>size <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">quotient</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: #cc66cc;">2</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>result <span style="color: #66cc66;">&#40;</span>partial<span style="color: #66cc66;">-</span>tree elts left<span style="color: #66cc66;">-</span>size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> left<span style="color: #66cc66;">-</span>result<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>non<span style="color: #66cc66;">-</span>left<span style="color: #66cc66;">-</span>elts <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> left<span style="color: #66cc66;">-</span>result<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>size <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> left<span style="color: #66cc66;">-</span>size <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>this<span style="color: #66cc66;">-</span>entry <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> non<span style="color: #66cc66;">-</span>left<span style="color: #66cc66;">-</span>elts<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>result <span style="color: #66cc66;">&#40;</span>partial<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> non<span style="color: #66cc66;">-</span>left<span style="color: #66cc66;">-</span>elts<span style="color: #66cc66;">&#41;</span> right<span style="color: #66cc66;">-</span>size<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> right<span style="color: #66cc66;">-</span>result<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>remaining<span style="color: #66cc66;">-</span>elts <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> right<span style="color: #66cc66;">-</span>result<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>make<span style="color: #66cc66;">-</span>tree this<span style="color: #66cc66;">-</span>entry left<span style="color: #66cc66;">-</span>tree right<span style="color: #66cc66;">-</span>tree<span style="color: #66cc66;">&#41;</span>
              remaining<span style="color: #66cc66;">-</span>elts<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></div></div>

<p>That&#8217;s much easier to read <img src='http://cs.mu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
The keyword to remember when reading through this function is the input must be an ordered list. With the benefit of an ordered list, its an easy algorithm to implement. Basically we would just take the middle element (or roughly the middle element when the number of elements in the list is even), and make that the root of the tree. Make all of the element before the root element in the list to be left tree, and all the element after the root element in the list to be right tree, then recurse on these two sublists. Finally combining the left and right subtree into a whole tree with &#8220;make-tree&#8221;. With some thought, it should become clear that this is in fact what this function does.<br />
The running time should be O(n) due to it running through the list of elements only once.</p>
<h4>Exercise 2.65</h4>
<h4>Exercise 2.66</h4>
<p>For 2.66, a slight modification on element-of-set? would suffice, and adding a new structure to hold two element is in order.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.66</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>record key val<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> key val<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>key record<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> record<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>val record<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> record<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>lookup given<span style="color: #66cc66;">-</span>key set<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> set<span style="color: #66cc66;">&#41;</span> #f<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> given<span style="color: #66cc66;">-</span>key <span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span>entry set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>entry set<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> given<span style="color: #66cc66;">-</span>key <span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span>entry set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>lookup given<span style="color: #66cc66;">-</span>key <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch set<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;">&gt;</span> given<span style="color: #66cc66;">-</span>key <span style="color: #66cc66;">&#40;</span>key <span style="color: #66cc66;">&#40;</span>entry set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
         <span style="color: #66cc66;">&#40;</span>lookup given<span style="color: #66cc66;">-</span>key <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>branch set<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></pre></div></div>

<h3>Huffman Encoding Trees</h3>
<h4>Exercise 2.67</h4>
<p>Just follow the algorithm outlined before, we then have: &#8216;(A D A B B C A)</p>
<h4>Exercise 2.68</h4>
<p>encode-symbol is quite simple to write, just follow the rough outline at the introduction to Huffman Encoding Trees. The first part of my code is to copy and paste all of the tree manipulation code from the book into the header.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.68</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>code<span style="color: #66cc66;">-</span>tree 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;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span>symbols left<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>symbols right<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>weight left<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>weight 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;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch tree<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> tree<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 tree<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> tree<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>leaf symbol weight<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> 'leaf symbol weight<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>leaf? object<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> object<span style="color: #66cc66;">&#41;</span> 'leaf<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>symbol<span style="color: #66cc66;">-</span>leaf 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: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>weight<span style="color: #66cc66;">-</span>leaf 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;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>symbols tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>leaf? tree<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span>symbol<span style="color: #66cc66;">-</span>leaf tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">caddr</span> tree<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>weight tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>leaf? tree<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>weight<span style="color: #66cc66;">-</span>leaf tree<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span>cadddr tree<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>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x set<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> set<span style="color: #66cc66;">&#41;</span> #f<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">equal?</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> #t<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set<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>encode message tree<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> message<span style="color: #66cc66;">&#41;</span>
      '<span style="color: #66cc66;">&#40;</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>encode<span style="color: #66cc66;">-</span>symbol <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> message<span style="color: #66cc66;">&#41;</span> tree<span style="color: #66cc66;">&#41;</span>
              <span style="color: #66cc66;">&#40;</span>encode <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> message<span style="color: #66cc66;">&#41;</span> tree<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>encode<span style="color: #66cc66;">-</span>symbol symbol tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? symbol <span style="color: #66cc66;">&#40;</span>symbols tree<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;">&#91;</span><span style="color: #66cc66;">&#40;</span>leaf? tree<span style="color: #66cc66;">&#41;</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
       <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>element<span style="color: #66cc66;">-</span>of<span style="color: #66cc66;">-</span>set? symbol <span style="color: #66cc66;">&#40;</span>symbols <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch tree<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: #cc66cc;">0</span> <span style="color: #66cc66;">&#40;</span>encode<span style="color: #66cc66;">-</span>symbol symbol <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
       <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span>encode<span style="color: #66cc66;">-</span>symbol symbol <span style="color: #66cc66;">&#40;</span>right<span style="color: #66cc66;">-</span>branch tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>error <span style="color: #ff0000;">&quot;Symbol does not exist in tree&quot;</span> symbol<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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> sample<span style="color: #66cc66;">-</span>tree
  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>code<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf 'A <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>
                  <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>code<span style="color: #66cc66;">-</span>tree
                   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf 'B <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>code<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf '<span style="color: #b1b100;">D</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>leaf 'C <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: #ff0000;">&quot;2.68&quot;</span>
<span style="color: #66cc66;">&#40;</span>encode '<span style="color: #66cc66;">&#40;</span>A <span style="color: #b1b100;">D</span> A B B C A<span style="color: #66cc66;">&#41;</span> sample<span style="color: #66cc66;">-</span>tree<span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.69</h4>
<p>This question is not very hard if you think about it in the right way, and a careful reading of the introduction paragraph about merging. Basically, follow the path that at every node, merge the smallest two trees (a leaf is a tree as well) currently available until one tree is left. If my explanation is not clear, hopefully my code will be clear.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.69</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>set x set<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> set<span style="color: #66cc66;">&#41;</span> <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;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">&#40;</span>weight x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>weight <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> set<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 set<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><span style="color: #b1b100;">car</span> set<span style="color: #66cc66;">&#41;</span>
                    <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> set<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>make<span style="color: #66cc66;">-</span>leaf<span style="color: #66cc66;">-</span>set pairs<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> pairs<span style="color: #66cc66;">&#41;</span>
      '<span style="color: #66cc66;">&#40;</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>pair <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> pairs<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> pair<span style="color: #66cc66;">&#41;</span>    <span style="color: #808080; font-style: italic;">; symbol</span>
                               <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> pair<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>  <span style="color: #808080; font-style: italic;">; frequency</span>
                    <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> pairs<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: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>successive<span style="color: #66cc66;">-</span>merge leaves<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;">cdr</span> leaves<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> leaves<span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>successive<span style="color: #66cc66;">-</span>merge
    <span style="color: #66cc66;">&#40;</span>adjoin<span style="color: #66cc66;">-</span>set <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>code<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> leaves<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> leaves<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                <span style="color: #66cc66;">&#40;</span>cddr leaves<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>generate<span style="color: #66cc66;">-</span>huffman<span style="color: #66cc66;">-</span>tree pairs<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>successive<span style="color: #66cc66;">-</span>merge <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>leaf<span style="color: #66cc66;">-</span>set pairs<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #ff0000;">&quot;2.69&quot;</span>
<span style="color: #66cc66;">&#40;</span>generate<span style="color: #66cc66;">-</span>huffman<span style="color: #66cc66;">-</span>tree '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>A <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>B <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>C <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</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;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 2.70</h4>
<p>Shouldn&#8217;t be too hard when you have done the previous questions:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">;; 2.70</span>
<span style="color: #ff0000;">&quot;2.70&quot;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> htree <span style="color: #66cc66;">&#40;</span>generate<span style="color: #66cc66;">-</span>huffman<span style="color: #66cc66;">-</span>tree '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>a <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>boom <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>Get <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>job <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>na <span style="color: #cc66cc;">16</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>Sha <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>yip <span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>Wah <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;">length</span> <span style="color: #66cc66;">&#40;</span>encode '<span style="color: #66cc66;">&#40;</span>Get a job Sha na na na na na na na na Get a job Sha na na na na na na na na Wah yip yip yip yip yip yip yip yip yip Sha boom<span style="color: #66cc66;">&#41;</span> htree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=8</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SICP 2.2</title>
		<link>http://cs.mu/?p=7</link>
		<comments>http://cs.mu/?p=7#comments</comments>
		<pubDate>Sat, 02 Aug 2008 02:00:48 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=7</guid>
		<description><![CDATA[Due to my need to move on, I will not comment on my solutions for this section either, but if anyone needs further explanation of anything i did, please feel free to ask either in comment or email. The following exercises from this section are not done yet: 2.29 C), 2.32, 2.38, 2.39. They are [...]]]></description>
			<content:encoded><![CDATA[<p>Due to my need to move on, I will not comment on my solutions for this section either, but if anyone needs further explanation of anything i did, please feel free to ask either in comment or email.</p>
<p>The following exercises from this section are not done yet: 2.29 C), 2.32, 2.38, 2.39. They are not done probably due to the fact i have not came up with a solution to them. If you have a good solution and would like to share, please post it in the comments.</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><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> lst<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>rest lst<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
      lst
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">last-pair</span> <span style="color: #66cc66;">&#40;</span>rest lst<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;">last-pair</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">23</span> <span style="color: #cc66cc;">72</span> <span style="color: #cc66cc;">149</span> <span style="color: #cc66cc;">34</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> lst<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 orig new<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> orig<span style="color: #66cc66;">&#41;</span>
        new
        <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>rest orig<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>first orig<span style="color: #66cc66;">&#41;</span> new<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 lst empty<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">9</span> <span style="color: #cc66cc;">16</span> <span style="color: #cc66cc;">25</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> us<span style="color: #66cc66;">-</span>coins <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">50</span> <span style="color: #cc66cc;">25</span> <span style="color: #cc66cc;">10</span> <span style="color: #cc66cc;">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><span style="color: #b1b100;">define</span> uk<span style="color: #66cc66;">-</span>coins <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">100</span> <span style="color: #cc66cc;">50</span> <span style="color: #cc66cc;">20</span> <span style="color: #cc66cc;">10</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">2</span> <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>
&nbsp;
<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;">&#91;</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;">&#93;</span>
        <span style="color: #66cc66;">&#91;</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;">&#93;</span>
        <span style="color: #66cc66;">&#91;</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;">&#93;</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>no<span style="color: #66cc66;">-</span>more? lst<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> lst<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 lst<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> lst<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 lst<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>first lst<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>cc <span style="color: #cc66cc;">100</span> us<span style="color: #66cc66;">-</span>coins<span style="color: #66cc66;">&#41;</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 <span style="color: #b1b100;">f</span> . r<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>parity <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;">f</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">even?</span> <span style="color: #b1b100;">odd?</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>list<span style="color: #66cc66;">-</span>parity lst<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> lst<span style="color: #66cc66;">&#41;</span> empty<span style="color: #66cc66;">&#93;</span>
            <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>parity <span style="color: #66cc66;">&#40;</span>first lst<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>first lst<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">-</span>parity <span style="color: #66cc66;">&#40;</span>rest lst<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
            <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">-</span>parity <span style="color: #66cc66;">&#40;</span>rest lst<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>list<span style="color: #66cc66;">-</span>parity <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #b1b100;">f</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>same<span style="color: #66cc66;">-</span>parity <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span> <span style="color: #cc66cc;">7</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>list<span style="color: #66cc66;">-</span>rec 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>
      empty
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>sqr <span style="color: #66cc66;">&#40;</span>first 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>list<span style="color: #66cc66;">-</span>rec <span style="color: #66cc66;">&#40;</span>rest 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>
<span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>rec <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</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>square<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> items<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> sqr 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>list<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</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> fun items<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>run<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>fun <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><span style="color: #b1b100;">for-each</span> fun <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;">&#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>
      #t
      <span style="color: #66cc66;">&#40;</span>run<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;">for-each</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;">newline</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">57</span> <span style="color: #cc66cc;">321</span> <span style="color: #cc66cc;">88</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: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</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: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</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;">define</span> complex <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">3</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">4</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">5</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</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;">&#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> complex<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: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <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><span style="color: #b1b100;">define</span> y <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</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> x y<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;-&gt; (1 2 3 4 5 6)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x y<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;-&gt; ((1 2 3) 4 5 6)</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x y<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;-&gt; ((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> lst<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 orig new<span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> orig<span style="color: #66cc66;">&#41;</span> new<span style="color: #66cc66;">&#93;</span>
          <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> <span style="color: #66cc66;">&#40;</span>first orig<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>rest orig<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>deep<span style="color: #66cc66;">-</span><span style="color: #b1b100;">reverse</span> <span style="color: #66cc66;">&#40;</span>first orig<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> new<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
          <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span>iter <span style="color: #66cc66;">&#40;</span>rest orig<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>first orig<span style="color: #66cc66;">&#41;</span> new<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>iter lst empty<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">3</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>
x
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">reverse</span> x<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>deep<span style="color: #66cc66;">-</span><span style="color: #b1b100;">reverse</span> x<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 tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> tree<span style="color: #66cc66;">&#41;</span> empty<span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</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> tree<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> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>fringe x<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>fringe <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x x<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>
&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>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;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> mobile<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>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;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> branch<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;">;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 mobile<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> mobile<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> mobile<span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</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 <span style="color: #66cc66;">&#40;</span>left<span style="color: #66cc66;">-</span>branch mobile<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 mobile<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;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;c)</span>
&nbsp;
<span style="color: #808080; font-style: italic;">;; 2.30</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> test<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span>
                        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">5</span><span style="color: #66cc66;">&#41;</span>
                        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</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;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</span>tree tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> tree<span style="color: #66cc66;">&#41;</span> null<span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> tree<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>square<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> tree<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> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</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>sqr <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> tree<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> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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 test<span style="color: #66cc66;">-</span>tree<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>tree<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> tree<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;">pair?</span> x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>square<span style="color: #66cc66;">-</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>sqr x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> tree<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;">-</span><span style="color: #b1b100;">map</span> test<span style="color: #66cc66;">-</span>tree<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> fun tree<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;">pair?</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> fun x<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>fun x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span>tree<span style="color: #66cc66;">-</span><span style="color: #b1b100;">map</span> sqr test<span style="color: #66cc66;">-</span>tree<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>accumulate op initial <span style="color: #b1b100;">sequence</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;">sequence</span><span style="color: #66cc66;">&#41;</span>
      initial
      <span style="color: #66cc66;">&#40;</span>op <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span>accumulate op initial <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #b1b100;">sequence</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: #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;">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> empty <span style="color: #b1b100;">sequence</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;">append</span> 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>
&nbsp;
<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>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">length</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</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>
&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>
<span style="color: #66cc66;">&#40;</span>horner<span style="color: #66cc66;">-</span>eval <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">0</span> <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;">;; 2.35</span>
<span style="color: #808080; font-style: italic;">;; enumerate-tree in book:</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>tree tree<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">null?</span> tree<span style="color: #66cc66;">&#41;</span> empty<span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">not</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">pair?</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">append</span> <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                      <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>tree <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> tree<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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>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: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>enumerate<span style="color: #66cc66;">-</span>tree <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>count<span style="color: #66cc66;">-</span>leaves <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> x x<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>
      empty
      <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> first 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> rest 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>
<span style="color: #ff0000;">&quot;2.36&quot;</span>
<span style="color: #66cc66;">&#40;</span>accumulate<span style="color: #66cc66;">-</span>n <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">0</span> '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</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><span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span> <span style="color: #cc66cc;">6</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">7</span> <span style="color: #cc66cc;">8</span> <span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">10</span> <span style="color: #cc66cc;">11</span> <span style="color: #cc66cc;">12</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></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=7</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SICP 2.1</title>
		<link>http://cs.mu/?p=6</link>
		<comments>http://cs.mu/?p=6#comments</comments>
		<pubDate>Sat, 02 Aug 2008 01:55:39 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=6</guid>
		<description><![CDATA[Section 2.1, I have kept most of the exercises I did for this section, but for some i got lazy and did not do. If you wish to compare answer for those exercises, please leave a comment and i would be happy to add them in. I will not add any comments since I did [...]]]></description>
			<content:encoded><![CDATA[<p>Section 2.1, I have kept most of the exercises I did for this section, but for some i got lazy and did not do. If you wish to compare answer for those exercises, please leave a comment and i would be happy to add them in. I will not add any comments since I did them a while ago, but i will just paste the code:</p>

<div class="wp_syntax"><div class="code"><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><span style="color: #b1b100;">gcd</span> x y<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;; we've implemented gcd in section 1.2.5.</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>
      x
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gcd</span> y <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">remainder</span> x 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: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>sign 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>
      <span style="color: #cc66cc;">0</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">abs</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: #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;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>g <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">gcd</span> n <span style="color: #b1b100;">d</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span>sign <span style="color: #66cc66;">&#40;</span>sign 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;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> n <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> g sign<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;">d</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> g sign<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.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>
&nbsp;
<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>
&nbsp;
<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>
&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>segment p1 p2<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> p1 p2<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>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>
&nbsp;
<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: #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;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</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><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>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</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>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #cc66cc;">1</span> <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><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: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #cc66cc;">1</span> <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;">;; 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 x y<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>
&nbsp;
<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 interval<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> interval<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>lower<span style="color: #66cc66;">-</span>bound interval<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> interval<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=6</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chapter 1</title>
		<link>http://cs.mu/?p=4</link>
		<comments>http://cs.mu/?p=4#comments</comments>
		<pubDate>Sat, 12 Jul 2008 18:25:37 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[SICP]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=4</guid>
		<description><![CDATA[Stuff in this chapter i haven&#8217;t kept on my computer, this is largely a placeholder post until i get some time to come back to this. Since I have more or less already done this chapter, I am going to lump the whole thing in one post. Chapter was quite simple for me, since I [...]]]></description>
			<content:encoded><![CDATA[<p>Stuff in this chapter i haven&#8217;t kept on my computer, this is largely a placeholder post until i get some time to come back to this.</p>
<p>Since I have more or less already done this chapter, I am going to lump the whole thing in one post.</p>
<p>Chapter was quite simple for me, since I have already finished HtDP for school. It is mostly a repeat of that book with some new problems, which I am going to present here.</p>
<p>I have skipped the exercises in Section 1.1 to go in to more interesting stuff, if I have time at the end, I will come back and do the exercises, but most people shouldn&#8217;t have problems with that section.</p>
<h2>Section 1.2</h2>
<h4>Exercise 1.9:</h4>
<p>Well this exercise should not cause too much problem, if you write it out, you will find that the version is recursive, and the second version is iterative.</p>
<h4>Exercise 1.10:</h4>
<p>This exercise practices the useful skill of tracing through the execution of a procedure more thoroughly, with multiple functions composed together, you can check the answer by running it through a scheme environment such as Dr Scheme.</p>
<h4>Exercise 1.11:</h4>
<p>Well the recursive process is straightforward, its just a translation of the definition, as follows:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">-</span>rec 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>f<span style="color: #66cc66;">-</span>rec <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>f<span style="color: #66cc66;">-</span>rec <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>f<span style="color: #66cc66;">-</span>rec <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></pre></div></div>

<p>The iterative version is a bit more tricky, but still relatively easy if you study the iterative version for the Fibonacci numbers example. The basic idea behind the whole thing is that you are doing a lot of repeated work by translating straight from definition. For example, to calculate f(n), you will have to calculate f(n-1), f(n-2), f(n-3). Then when you go on to calculate 2f(n-1), without storing the value of f(n-1) somewhere, you will have to recalculate the whole thing again. So we will be creating some more parameters to store enough information to calculate f(n) without doing repeated work. A more general method to resolve this problem is called Dynamic Programming.<br />
Anyways, without further ado, here is the code:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><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>f<span style="color: #66cc66;">-</span>iter <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">1</span> <span style="color: #cc66cc;">0</span> n<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>f<span style="color: #66cc66;">-</span>iter a b c count<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> count <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
      c
      <span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">-</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">2</span> b<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> <span style="color: #cc66cc;">3</span> c<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> a b  <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> count <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></pre></div></div>

<h4>Exercise 1.12</h4>
<p>This exercise is to write a procedure to compute binomial coefficients, it is quite easy. We&#8217;ll have two parameters, one to denote the number of rows (first being 0), and the other denote the number of columns (first being 0):</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>pascal<span style="color: #66cc66;">-</span>number row col<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> col <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">=</span> row <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #66cc66;">&#91;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> <span style="color: #66cc66;">&#40;</span>pascal<span style="color: #66cc66;">-</span>number <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> row <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> col <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>pascal<span style="color: #66cc66;">-</span>number <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> row <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> col<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<h4>Exercise 1.13</h4>
<p>Skipped, due to it being a practice in induction proofs, and the actual process involved is quite nasty.</p>
<h4>Exercise 1.14</h4>
]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=4</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>scheme test</title>
		<link>http://cs.mu/?p=15</link>
		<comments>http://cs.mu/?p=15#comments</comments>
		<pubDate>Mon, 07 Jul 2008 20:29:23 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=3</guid>
		<description><![CDATA[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 &#40;define &#40;make-queue&#41; &#40;let &#40;&#91;front-ptr '&#40;&#41;&#93; &#91;rear-ptr '&#40;&#41;&#93;&#41; &#40;define &#40;empty-queue?&#41; &#40;empty? front-ptr&#41;&#41; &#40;define &#40;insert-queue! new&#41; &#40;if &#40;empty-queue?&#41; &#40;begin &#40;set-front-ptr! new&#41; &#40;set-rear-ptr! new&#41;&#41; &#40;begin &#40;set-cdr rear-ptr new&#41; &#40;set-rear-ptr! new&#41;&#41;&#41;&#41; &#40;define &#40;dispatch m&#41; &#40;cond &#91;&#40;equal? m 'insert-queue!&#41; insert-queue!&#93;&#41;&#41; dispatch&#41;&#41; 1 2 3 [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>queue<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;">&#91;</span>front<span style="color: #66cc66;">-</span>ptr '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
        <span style="color: #66cc66;">&#91;</span>rear<span style="color: #66cc66;">-</span>ptr '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</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>empty<span style="color: #66cc66;">-</span>queue?<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>empty? front<span style="color: #66cc66;">-</span>ptr<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>insert<span style="color: #66cc66;">-</span>queue<span style="color: #66cc66;">!</span> new<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>empty<span style="color: #66cc66;">-</span>queue?<span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
            <span style="color: #66cc66;">&#40;</span>set<span style="color: #66cc66;">-</span>front<span style="color: #66cc66;">-</span>ptr<span style="color: #66cc66;">!</span> new<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>set<span style="color: #66cc66;">-</span>rear<span style="color: #66cc66;">-</span>ptr<span style="color: #66cc66;">!</span> new<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">begin</span>
            <span style="color: #66cc66;">&#40;</span>set<span style="color: #66cc66;">-</span><span style="color: #b1b100;">cdr</span> rear<span style="color: #66cc66;">-</span>ptr new<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#40;</span>set<span style="color: #66cc66;">-</span>rear<span style="color: #66cc66;">-</span>ptr<span style="color: #66cc66;">!</span> new<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>dispatch m<span style="color: #66cc66;">&#41;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span>
        <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">equal?</span> m 'insert<span style="color: #66cc66;">-</span>queue<span style="color: #66cc66;">!</span><span style="color: #66cc66;">&#41;</span> insert<span style="color: #66cc66;">-</span>queue<span style="color: #66cc66;">!</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    dispatch<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Hello <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=15</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello world!</title>
		<link>http://cs.mu/?p=13</link>
		<comments>http://cs.mu/?p=13#comments</comments>
		<pubDate>Mon, 07 Jul 2008 20:17:18 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.intricate.info/?p=1</guid>
		<description><![CDATA[Hi all, this is my first time blogging, I hope to have something fun/interesting up soon. I hope adding new content to this blog will be something I do regularly, let&#8217;s see how that turns out. This blog is going to be about my hobbies and interests, which currently include computer science (seeing that I [...]]]></description>
			<content:encoded><![CDATA[<p>Hi all, this is my first time blogging, I hope to have something fun/interesting up soon. I hope adding new content to this blog will be something I do regularly, let&#8217;s see how that turns out. This blog is going to be about my hobbies and interests, which currently include computer science (seeing that I am a computer science student), and other things which I have not figured out yet. I also hope through writing this blog it will improve/maintain my English skills, since now it is slipping a lot.</p>
]]></content:encoded>
			<wfw:commentRss>http://cs.mu/?feed=rss2&amp;p=13</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
