<?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>Overflow: Auto &#187; Scheme</title>
	<atom:link href="http://www.tylerprete.com/category/scheme/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tylerprete.com</link>
	<description>Straight from the mind of Tyler Prete</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:07:19 +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>Problem: Spam-Egg List</title>
		<link>http://www.tylerprete.com/2007/07/12/problem-spam-egg-list/</link>
		<comments>http://www.tylerprete.com/2007/07/12/problem-spam-egg-list/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 16:08:30 +0000</pubDate>
		<dc:creator>Tyler</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://www.tylerprete.com/2007/07/12/problem-spam-egg-list/</guid>
		<description><![CDATA[So on Stoto&#8217;s Weblog Tuesday there was a little programming challenge called the Spam-Egg List Problem. Here is the problem: Write a function called dumpList that takes as its parameters a string and a reference to an arbitrarily complex nested list and prints the value of each list element on a separate line. The value [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>So on <a href="http://jroller.com/page/sto" title="Stoto's Weblog">Stoto&#8217;s Weblog</a> Tuesday there was a little programming challenge called the <a href="http://jroller.com/page/sto?entry=nested_list_question" title="Spam-Egg List Problem">Spam-Egg List Problem.</a></p>
<p>Here is the problem:<br />
Write a function called dumpList that takes as its parameters a string and a reference to an arbitrarily complex nested list and prints the value of each list element on a separate line. The value on each line should be preceded by the string and numbers indicating the depth and index of the element in the list. Assume that the list contains only strings and other nested lists.</p>
<p>For example, given the following nested list:<br />
list = [ 'a string', [ 'a', 'b', 'c' ], &#8216;spam&#8217;, [ 'eggs' ] ] and the string &#8216;Foo&#8217;, the output of dumpList(&#8216;Foo&#8217;, list) would look like:</p>
<p>Foo.0: a string<br />
Foo.1.0: a<br />
Foo.1.1: b<br />
Foo.1.2: c<br />
Foo.2: spam<br />
Foo.3.0: eggs<br />
<span id="more-6"></span><br />
My solution (in scheme) is as follows:</p>

<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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</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>dump<span style="color: #66cc66;">-</span><span style="color: #b1b100;">list</span> word <span style="color: #b1b100;">sequence</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>dump<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>iter word <span style="color: #b1b100;">sequence</span> count<span style="color: #66cc66;">&#41;</span>
&nbsp;
    <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>
&nbsp;
        '<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
        <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;">list?</span> <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;">&#41;</span>
&nbsp;
                <span style="color: #66cc66;">&#40;</span>dump<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>iter
&nbsp;
                 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">string-append</span>
&nbsp;
                  word <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #66cc66;">&#40;</span>number<span style="color: #66cc66;">-&gt;</span>string count<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: #b1b100;">sequence</span><span style="color: #66cc66;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
                <span style="color: #66cc66;">&#40;</span>dump<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>iter word <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;">&#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>
&nbsp;
               <span style="color: #66cc66;">&#40;</span>#t
&nbsp;
                <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">display</span>
&nbsp;
                 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">string-append</span> word <span style="color: #ff0000;">&quot;.&quot;</span> <span style="color: #66cc66;">&#40;</span>number<span style="color: #66cc66;">-&gt;</span>string count<span style="color: #66cc66;">&#41;</span>
&nbsp;
                                <span style="color: #ff0000;">&quot;: &quot;</span> <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;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
                <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">newline</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
                <span style="color: #66cc66;">&#40;</span>dump<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>iter word <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;">&#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><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
  <span style="color: #66cc66;">&#40;</span>dump<span style="color: #66cc66;">-</span>list<span style="color: #66cc66;">-</span>iter word <span style="color: #b1b100;">sequence</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>It&#8217;s a simple recursive solution with side-effects (printing).  It would be relatively easy to rework it to maintain a list of strings and print them at the very end, but the problem didn&#8217;t call for it, so I&#8217;m satisfied with this solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tylerprete.com/2007/07/12/problem-spam-egg-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XKCD #287 Comic Solution</title>
		<link>http://www.tylerprete.com/2007/07/09/xkcd-comic-solution/</link>
		<comments>http://www.tylerprete.com/2007/07/09/xkcd-comic-solution/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 22:18:52 +0000</pubDate>
		<dc:creator>Tyler</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://www.tylerprete.com/2007/07/09/xkcd-comic-solution/</guid>
		<description><![CDATA[In today&#8217;s xkcd comic the joke was about using the knapsack problem at a restaurant. Just for fun, I solved it in scheme. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In today&#8217;s <a href="http://xkcd.com/c287.html">xkcd comic</a> the joke was about using the knapsack problem at a restaurant.  Just for fun, I solved it in scheme.</p>
<p><span id="more-5"></span></p>

<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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
</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>appetizer name cost<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> name cost<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>name app<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> app<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>cost app<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> app<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> delta <span style="color: #cc66cc;">0.000001</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>float<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> 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: #b1b100;">abs</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> x y<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> delta<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> appetizers
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;mixed fruit&quot;</span> <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;french fries&quot;</span> <span style="color: #cc66cc;">2.75</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;side salad&quot;</span> <span style="color: #cc66cc;">3.35</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;hot wings&quot;</span> <span style="color: #cc66cc;">3.55</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;mozzarella sticks&quot;</span> <span style="color: #cc66cc;">4.20</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">&#40;</span>make<span style="color: #66cc66;">-</span>appetizer <span style="color: #ff0000;">&quot;sampler plate&quot;</span> <span style="color: #cc66cc;">5.80</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>append<span style="color: #66cc66;">-</span>unless<span style="color: #66cc66;">-</span>null set elem<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> set<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;">cons</span> elem set<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>appetizers<span style="color: #66cc66;">-</span>for<span style="color: #66cc66;">-</span>cost<span style="color: #66cc66;">-</span>n apps 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: #b1b100;">null?</span> apps<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;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>float<span style="color: #66cc66;">-</span><span style="color: #b1b100;">equal?</span> <span style="color: #66cc66;">&#40;</span>cost <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> apps<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> apps<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> <span style="color: #66cc66;">&#40;</span>cost <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> apps<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span>
             <span style="color: #66cc66;">&#40;</span>appetizers<span style="color: #66cc66;">-</span>for<span style="color: #66cc66;">-</span>cost<span style="color: #66cc66;">-</span>n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> apps<span style="color: #66cc66;">&#41;</span> n<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;">append</span>
              <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">map</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> apps<span style="color: #66cc66;">&#41;</span> x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                   <span style="color: #66cc66;">&#40;</span>appetizers<span style="color: #66cc66;">-</span>for<span style="color: #66cc66;">-</span>cost<span style="color: #66cc66;">-</span>n apps <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> n <span style="color: #66cc66;">&#40;</span>cost <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> apps<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>appetizers<span style="color: #66cc66;">-</span>for<span style="color: #66cc66;">-</span>cost<span style="color: #66cc66;">-</span>n <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> apps<span style="color: #66cc66;">&#41;</span> n<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>Calling it with: (appetizers-for-cost-n appetizers 15.05)<br />
Results in:</p>

<div class="wp_syntax"><div class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;mixed fruit&quot;</span>
  .
  <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
 <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;mixed fruit&quot;</span> . <span style="color: #cc66cc;">2.15</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hot wings&quot;</span> . <span style="color: #cc66cc;">3.55</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hot wings&quot;</span> . <span style="color: #cc66cc;">3.55</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;sampler plate&quot;</span>
  .
  <span style="color: #cc66cc;">5.8</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.tylerprete.com/2007/07/09/xkcd-comic-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix to expression-tree in scheme</title>
		<link>http://www.tylerprete.com/2007/07/02/postfix-to-expression-tree-in-scheme/</link>
		<comments>http://www.tylerprete.com/2007/07/02/postfix-to-expression-tree-in-scheme/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 16:33:14 +0000</pubDate>
		<dc:creator>Tyler</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Scheme]]></category>

		<guid isPermaLink="false">http://www.tylerprete.com/2007/07/02/postfix-to-expression-treee-in-scheme/</guid>
		<description><![CDATA[So today someone on a mailing list asked for help with a postfix to expression-tree converter. While he hasn&#8217;t responded to me yet, I thought I&#8217;d share my solution on here. It was surprisingly easy to write in Scheme. Please feel free to comment if you have suggestions. 1 2 3 4 5 6 7 [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>So today someone on a mailing list asked for help with a postfix to expression-tree converter.  While he hasn&#8217;t responded to me yet, I thought I&#8217;d share my solution on here.  It was surprisingly easy to write in Scheme.  Please feel free to comment if you have suggestions.<br />
<span id="more-4"></span></p>

<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
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="scheme" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">; define a tree structure to work with</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>tree val left right<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">list</span> val left right<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>value 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>left<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>right<span style="color: #66cc66;">-</span>branch tree<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>
&nbsp;
<span style="color: #808080; font-style: italic;">; converts postfix list to an expression-tree</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>to<span style="color: #66cc66;">-</span>tree ops<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter symbols values<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;progress through symbols keeping a list of values</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> symbols<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> values<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">; returning end result</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>x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> symbols<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> symbols<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x values<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>postfix<span style="color: #66cc66;">-</span>iter
                       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> symbols<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 x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> values<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                             <span style="color: #66cc66;">&#40;</span>cddr values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter ops '<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: #808080; font-style: italic;">;(postfix-to-tree '(2 1 + 3 4 * +)) == (+ (* 4 3) (+ 1 2))</span></pre></td></tr></table></div>

<p>Also, suppose rather than making an expression tree, we wanted to evaluate the postfix instead?<br />
We could just eval the output of postfix-to-tree, i.e. (eval (postfix-to-tree &#8216;(2 1 + 3 4 * +))), but in general I think it&#8217;s preferred to avoid eval.<br />
So alternatively, we&#8217;ll write a function to evaluate the symbols, and make a minor change to our main function and we&#8217;re there.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</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>eval<span style="color: #66cc66;">-</span>op op a b<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> '<span style="color: #66cc66;">+</span> op<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">+</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> '<span style="color: #66cc66;">-</span> op<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> '<span style="color: #66cc66;">*</span> op<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">eq?</span> '<span style="color: #66cc66;">/</span> op<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">/</span> a b<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">; evaluates postfix-expression</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>eval<span style="color: #66cc66;">-</span>postfix ops<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">define</span> <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter symbols values<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">;progress through symbols keeping a list of values</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> symbols<span style="color: #66cc66;">&#41;</span>
        <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> values<span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">; returning end result</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>x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> symbols<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
          <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cond</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">number?</span> x<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> symbols<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> x values<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>postfix<span style="color: #66cc66;">-</span>iter
                       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cdr</span> symbols<span style="color: #66cc66;">&#41;</span>
                       <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cons</span> <span style="color: #66cc66;">&#40;</span>eval<span style="color: #66cc66;">-</span>op x <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">cadr</span> values<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">car</span> values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
                             <span style="color: #66cc66;">&#40;</span>cddr values<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>postfix<span style="color: #66cc66;">-</span>iter ops '<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: #808080; font-style: italic;">; (eval-postfix '(2 1 + 3 4 * +)) == 15</span></pre></td></tr></table></div>

<p>These solutions could probably use a little error-checking, but they both operate correctly on valid input and get the job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tylerprete.com/2007/07/02/postfix-to-expression-tree-in-scheme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

