<HTML><HEAD><TITLE>CosmicOS message</TITLE></HEAD>
<BODY BGCOLOR='#ffffff'><TT>
#   Author: Paul Fitzpatrick, paulfitz@ai.mit.edu<BR>
#   Copyright (c) 2003 Paul Fitzpatrick<BR>
#<BR>
#   This file is part of CosmicOS.<BR>
#<BR>
#   CosmicOS is free software; you can redistribute it and/or modify<BR>
#   it under the terms of the GNU General Public License as published by<BR>
#   the Free Software Foundation; either version 2 of the License, or<BR>
#   (at your option) any later version.<BR>
#<BR>
#   CosmicOS is distributed in the hope that it will be useful,<BR>
#   but WITHOUT ANY WARRANTY; without even the implied warranty of<BR>
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<BR>
#   GNU General Public License for more details.<BR>
#<BR>
#   You should have received a copy of the GNU General Public License<BR>
#   along with CosmicOS; if not, write to the Free Software<BR>
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA<BR>
#<BR>
<A NAME='0'><FONT COLOR=red># MATH introduce numbers (in unary notation)</FONT><BR>
(intro (unary 0));<BR>
(intro (unary 1 0));<BR>
(intro (unary 1 1 0));<BR>
(intro (unary 1 1 1 0));<BR>
(intro (unary 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 0));<BR>
(intro (unary 1 1 1 0));<BR>
(intro (unary 1 1 0));<BR>
(intro (unary 1 0));<BR>
(intro (unary 0));<BR>
(intro (unary 0));<BR>
(intro (unary 1 0));<BR>
(intro (unary 1 1 0));<BR>
(intro (unary 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 0));<BR>
(intro (unary 1 0));<BR>
(intro (unary 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 0));<BR>
(intro (unary 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 0));<BR>
(intro (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
<A NAME='1'><FONT COLOR=red># MATH now show equality</FONT><BR>
(intro =);<BR>
(= (unary 0) (unary 0));<BR>
(= (unary 1 1 1 1 0) (unary 1 1 1 1 0));<BR>
(= (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0));<BR>
(= (unary 1 1 0) (unary 1 1 0));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
<A NAME='2'><FONT COLOR=red># MATH now show other relational operators</FONT><BR>
(intro &gt;);<BR>
(&gt; (unary 1 1 1 0) (unary 1 0));<BR>
(&gt; (unary 1 0) (unary 0));<BR>
(&gt; (unary 1 1 1 1 1 1 0) (unary 0));<BR>
(&gt; (unary 1 1 1 1 0) (unary 0));<BR>
(&gt; (unary 1 1 1 1 1 0) (unary 0));<BR>
(&gt; (unary 1 1 1 1 0) (unary 0));<BR>
(&gt; (unary 1 0) (unary 0));<BR>
(&gt; (unary 1 1 1 1 1 1 0) (unary 1 0));<BR>
(&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 0));<BR>
(&gt; (unary 1 1 1 0) (unary 1 0));<BR>
(&gt; (unary 1 1 1 1 1 0) (unary 0));<BR>
(intro &lt;);<BR>
(&lt; (unary 0) (unary 1 1 1 1 1 1 0));<BR>
(&lt; (unary 0) (unary 1 0));<BR>
(&lt; (unary 0) (unary 1 0));<BR>
(&lt; (unary 0) (unary 1 1 0));<BR>
(&lt; (unary 1 0) (unary 1 1 1 0));<BR>
(&lt; (unary 0) (unary 1 1 0));<BR>
(&lt; (unary 1 1 0) (unary 1 1 1 1 0));<BR>
(&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
(&lt; (unary 0) (unary 1 1 0));<BR>
(&lt; (unary 0) (unary 1 1 1 1 1 0));<BR>
(&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 1 0));<BR>
(&lt; (unary 1 1 0) (unary 1 1 1 0));<BR>
(&gt; (unary 1 1 0) (unary 1 0));<BR>
(&gt; (unary 1 1 1 1 1 0) (unary 1 0));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
(&gt; (unary 1 0) (unary 0));<BR>
(&lt; (unary 1 0) (unary 1 1 1 1 0));<BR>
(= (unary 1 1 1 1 0) (unary 1 1 1 1 0));<BR>
(&gt; (unary 1 1 1 0) (unary 1 1 0));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
(&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
<A NAME='3'><FONT COLOR=red># MATH introduce the NOT logical operator</FONT><BR>
(intro not);<BR>
(= (unary 1 0) (unary 1 0));<BR>
(not (&lt; (unary 1 0) (unary 1 0)));<BR>
(not (&gt; (unary 1 0) (unary 1 0)));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(not (&gt; (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(= (unary 0) (unary 0));<BR>
(not (&lt; (unary 0) (unary 0)));<BR>
(not (&gt; (unary 0) (unary 0)));<BR>
(= (unary 1 1 1 0) (unary 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(not (&gt; (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(= (unary 1 0) (unary 1 0));<BR>
(not (&lt; (unary 1 0) (unary 1 0)));<BR>
(not (&gt; (unary 1 0) (unary 1 0)));<BR>
(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not (= (unary 1 0) (unary 1 1 1 1 0)));<BR>
(&lt; (unary 1 0) (unary 1 1 1 1 0));<BR>
(not (&gt; (unary 1 0) (unary 1 1 1 1 0)));<BR>
(not (= (unary 1 1 0) (unary 1 1 1 1 0)));<BR>
(&lt; (unary 1 1 0) (unary 1 1 1 1 0));<BR>
(not (&gt; (unary 1 1 0) (unary 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));<BR>
(not (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));<BR>
(not (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(not (= (unary 1 0) (unary 1 1 1 0)));<BR>
(&lt; (unary 1 0) (unary 1 1 1 0));<BR>
(not (&gt; (unary 1 0) (unary 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0));<BR>
(not (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(&gt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(&gt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 0) (unary 1 0)));<BR>
(&gt; (unary 1 1 1 0) (unary 1 0));<BR>
(not (&lt; (unary 1 1 1 0) (unary 1 0)));<BR>
(not (= (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(&gt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not (= (unary 1 1 1 1 1 1 0) (unary 1 1 1 0)));<BR>
(&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 0));<BR>
(not (&lt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 0)));<BR>
<A NAME='4'><FONT COLOR=red># MATH introduce the AND logical operator</FONT><BR>
(intro and);<BR>
(and (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 0) (unary 1 1 1 0)));<BR>
(and (= (unary 1 0) (unary 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(and (&gt; (unary 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 0) (unary 1 0)));<BR>
(and (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(and (&gt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0)));<BR>
(and (&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(and (= (unary 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 0) (unary 1 1 0)));<BR>
(and (&gt; (unary 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0)));<BR>
(and (&lt; (unary 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(and (&lt; (unary 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0)));<BR>
(not (and (&gt; (unary 1 1 1 1 0) (unary 1 1 1 0)) (&gt; (unary 0) (unary 1 0))));<BR>
(not<BR>
&nbsp;(and (&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 0) (unary 1 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 0) (unary 1 1 1 1 1 0))));<BR>
(not (and (= (unary 1 0) (unary 1 0)) (&lt; (unary 1 1 1 1 1 0) (unary 1 1 0))));<BR>
(not (and (&gt; (unary 1 1 0) (unary 1 1 1 0)) (&lt; (unary 1 0) (unary 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&lt; (unary 1 1 1 1 1 1 0) (unary 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 0) (unary 1 1 0))));<BR>
(not<BR>
&nbsp;(and (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 0) (unary 0))));<BR>
(not<BR>
&nbsp;(and (= (unary 1 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&gt; (unary 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))));<BR>
(not (and (= (unary 1 1 1 1 0) (unary 0)) (&gt; (unary 0) (unary 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (= (unary 1 1 1 1 1 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 0) (unary 1 1 1 0))));<BR>
(not (and (&gt; (unary 0) (unary 1 1 1 1 0)) (&gt; (unary 1 1 0) (unary 1 1 0))));<BR>
(not (and (= (unary 0) (unary 1 1 1 1 0)) (= (unary 1 1 1 1 1 0) (unary 1 0))));<BR>
(not (and (&lt; (unary 1 1 0) (unary 1 1 1 1 0)) (&lt; (unary 1 1 1 0) (unary 1 0))));<BR>
(and (&lt; (unary 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(not<BR>
&nbsp;(and (&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 0) (unary 1 1 1 0))));<BR>
(not (and (&gt; (unary 1 0) (unary 0)) (&lt; (unary 1 1 1 0) (unary 1 1 0))));<BR>
(and (&lt; (unary 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 0) (unary 0)));<BR>
(not (and (= (unary 1 1 1 1 0) (unary 1 0)) (&gt; (unary 0) (unary 1 1 1 0))));<BR>
(not<BR>
&nbsp;(and (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0))));<BR>
(not (and (= (unary 1 1 0) (unary 1 0)) (&gt; (unary 1 0) (unary 1 1 1 0))));<BR>
(not (and (&gt; (unary 1 1 1 1 0) (unary 1 1 1 1 0)) (= (unary 1 0) (unary 1 0))));<BR>
(not<BR>
&nbsp;(and (&gt; (unary 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))));<BR>
<A NAME='5'><FONT COLOR=red># MATH introduce the OR logical operator</FONT><BR>
(intro or);<BR>
(or (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 0)));<BR>
(or (&lt; (unary 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 0) (unary 0)));<BR>
(or (&gt; (unary 1 1 1 1 0) (unary 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 0) (unary 1 1 1 1 0)));<BR>
(or (&lt; (unary 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 0) (unary 0)));<BR>
(or (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 0) (unary 0)));<BR>
(or (&gt; (unary 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(or (&gt; (unary 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(or (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 1 0)));<BR>
(or (= (unary 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0)));<BR>
(or (&lt; (unary 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 0) (unary 0)));<BR>
(or (&lt; (unary 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 0) (unary 1 1 0)));<BR>
(or (&gt; (unary 1 1 1 0) (unary 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 0) (unary 1 1 0)));<BR>
(or (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 0) (unary 1 1 1 1 1 0)));<BR>
(or (&lt; (unary 1 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(or (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 0) (unary 1 1 1 1 0)));<BR>
(or (&gt; (unary 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 0) (unary 0)));<BR>
(or (= (unary 1 1 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 0) (unary 1 1 0)));<BR>
(or (&lt; (unary 1 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(or (= (unary 1 1 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 0) (unary 0)));<BR>
(or (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 0) (unary 1 1 0)));<BR>
(not<BR>
&nbsp;(or (&gt; (unary 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 0) (unary 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(or (&gt; (unary 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 0) (unary 1 1 1 1 1 0))));<BR>
(not (or (&gt; (unary 1 1 1 0) (unary 1 1 1 1 0)) (= (unary 1 0) (unary 0))));<BR>
(not<BR>
&nbsp;(or (&gt; (unary 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 0))));<BR>
(not (or (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 0)) (&gt; (unary 0) (unary 0))));<BR>
(not (or (&gt; (unary 0) (unary 1 0)) (&lt; (unary 1 1 1 1 1 0) (unary 1 1 0))));<BR>
(not (or (&gt; (unary 1 0) (unary 1 1 1 1 1 1 0)) (&lt; (unary 1 1 0) (unary 0))));<BR>
(or (&gt; (unary 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 0) (unary 1 1 1 0)));<BR>
(or (&lt; (unary 1 1 1 1 0) (unary 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 1 0)));<BR>
(or (= (unary 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 0) (unary 1 1 0)));<BR>
(not<BR>
&nbsp;(or (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 0) (unary 1 0))));<BR>
(or (&gt; (unary 1 1 1 1 0) (unary 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(or (&lt; (unary 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(not (or (&gt; (unary 0) (unary 0)) (= (unary 1 1 0) (unary 1 1 1 0))));<BR>
(or (&gt; (unary 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 0) (unary 1 0)));<BR>
<A NAME='6'><FONT COLOR=red># MATH use equality for truth values</FONT><BR>
(= (&gt; (unary 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(= (= (unary 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));<BR>
(= (&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 0) (unary 1 0)));<BR>
(= (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;(&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(= (= (unary 1 1 0) (unary 1 1 0)) (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(= (= (unary 1 1 1 0) (unary 1 1 0)) (= (unary 1 0) (unary 0)));<BR>
(= (&gt; (unary 0) (unary 1 0)) (&lt; (unary 1 1 1 1 0) (unary 1 0)));<BR>
(= (&gt; (unary 1 0) (unary 1 1 1 1 1 0)) (&gt; (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(= (&gt; (unary 1 1 0) (unary 1 1 1 1 1 0)) (&lt; (unary 1 0) (unary 0)));<BR>
(= (= (unary 1 1 1 0) (unary 1 1 1 1 0)) (= (unary 0) (unary 1 1 1 1 0)));<BR>
(not<BR>
&nbsp;(= (= (unary 1 0) (unary 0)) (&lt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))));<BR>
(not (= (= (unary 1 1 1 1 1 0) (unary 1 1 0)) (= (unary 0) (unary 0))));<BR>
(not<BR>
&nbsp;(= (&lt; (unary 1 1 1 1 1 0) (unary 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))));<BR>
(not (= (= (unary 0) (unary 1 0)) (&gt; (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(= (&gt; (unary 1 0) (unary 1 1 1 1 0)) (&lt; (unary 1 1 1 0) (unary 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(= (&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(= (unary 1 1 1 1 0) (unary 1 0))));<BR>
(not<BR>
&nbsp;(= (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (unary 1 1 1 0) (unary 1 1 1 1 0))));<BR>
(not (= (&lt; (unary 0) (unary 1 1 0)) (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))));<BR>
(not<BR>
&nbsp;(= (&gt; (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0)) (&lt; (unary 1 1 0) (unary 0))));<BR>
(not<BR>
&nbsp;(= (&lt; (unary 1 1 1 1 0) (unary 1 1 1 1 1 0)) (= (unary 1 1 1 0) (unary 0))));<BR>
(intro true);<BR>
(intro false);<BR>
(= (true) (= (unary 1 1 1 0) (unary 1 1 1 0)));<BR>
(= (true) (= (unary 0) (unary 0)));<BR>
(= (true) (&gt; (unary 1 1 1 1 1 0) (unary 1 1 0)));<BR>
(= (true) (&lt; (unary 1 1 1 0) (unary 1 1 1 1 0)));<BR>
(= (true) (&gt; (unary 1 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));<BR>
(= (&lt; (unary 1 0) (unary 1 1 1 1 0)) (true));<BR>
(= (&lt; (unary 1 1 1 0) (unary 1 1 1 1 0)) (true));<BR>
(= (= (unary 1 1 1 0) (unary 1 1 1 0)) (true));<BR>
(= (&lt; (unary 1 1 1 0) (unary 1 1 1 1 0)) (true));<BR>
(= (= (unary 1 1 1 1 0) (unary 1 1 1 1 0)) (true));<BR>
(= (false) (&gt; (unary 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(= (false) (= (unary 1 1 0) (unary 1 1 1 1 0)));<BR>
(= (false) (&lt; (unary 1 1 0) (unary 0)));<BR>
(= (false) (&gt; (unary 1 1 1 0) (unary 1 1 1 1 1 1 0)));<BR>
(= (false) (&lt; (unary 1 1 1 1 0) (unary 1 1 1 0)));<BR>
(= (&gt; (unary 1 1 0) (unary 1 1 1 1 1 0)) (false));<BR>
(= (= (unary 1 1 0) (unary 1 0)) (false));<BR>
(= (= (unary 1 1 0) (unary 1 1 1 1 1 0)) (false));<BR>
(= (&lt; (unary 1 1 1 1 1 1 0) (unary 1 1 0)) (false));<BR>
(= (&lt; (unary 1 1 1 0) (unary 1 0)) (false));<BR>
(= (true) (true));<BR>
(= (false) (false));<BR>
(not (= (true) (false)));<BR>
(not (= (false) (true)));<BR>
<A NAME='7'><FONT COLOR=red># MATH introduce addition</FONT><BR>
(intro +);<BR>
(= (+ (unary 1 1 1 0) (unary 1 1 1 1 0)) (unary 1 1 1 1 1 1 1 0));<BR>
(= (+ (unary 0) (unary 1 1 1 0)) (unary 1 1 1 0));<BR>
(= (+ (unary 0) (unary 1 1 1 0)) (unary 1 1 1 0));<BR>
(= (+ (unary 1 0) (unary 0)) (unary 1 0));<BR>
(= (+ (unary 0) (unary 0)) (unary 0));<BR>
(= (+ (unary 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 0));<BR>
(= (+ (unary 1 0) (unary 0)) (unary 1 0));<BR>
(= (+ (unary 1 0) (unary 0)) (unary 1 0));<BR>
(= (+ (unary 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 1 0));<BR>
(= (+ (unary 0) (unary 0)) (unary 0));<BR>
<A NAME='8'><FONT COLOR=red># MATH introduce subtraction</FONT><BR>
(intro -);<BR>
(= (- (unary 1 1 1 1 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 0));<BR>
(= (- (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 0));<BR>
(= (- (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 0)) (unary 1 1 1 0));<BR>
(= (- (unary 1 1 1 1 1 0) (unary 1 1 0)) (unary 1 1 1 0));<BR>
(= (- (unary 1 0) (unary 1 0)) (unary 0));<BR>
(= (- (unary 0) (unary 0)) (unary 0));<BR>
(= (- (unary 1 1 0) (unary 0)) (unary 1 1 0));<BR>
(= (- (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 0));<BR>
(= (- (unary 1 1 1 1 0) (unary 1 1 1 1 0)) (unary 0));<BR>
(= (- (unary 1 1 1 0) (unary 0)) (unary 1 1 1 0));<BR>
<A NAME='9'><FONT COLOR=red># MATH introduce multiplication</FONT><BR>
(intro *);<BR>
(= (* (unary 0) (unary 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 1 1 0)) (unary 0));<BR>
(= (* (unary 1 0) (unary 0)) (unary 0));<BR>
(= (* (unary 1 0) (unary 1 0)) (unary 1 0));<BR>
(= (* (unary 1 0) (unary 1 1 0)) (unary 1 1 0));<BR>
(= (* (unary 1 0) (unary 1 1 1 0)) (unary 1 1 1 0));<BR>
(= (* (unary 1 1 0) (unary 0)) (unary 0));<BR>
(= (* (unary 1 1 0) (unary 1 0)) (unary 1 1 0));<BR>
(= (* (unary 1 1 0) (unary 1 1 0)) (unary 1 1 1 1 0));<BR>
(= (* (unary 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 1 1 0));<BR>
(= (* (unary 1 1 1 0) (unary 0)) (unary 0));<BR>
(= (* (unary 1 1 1 0) (unary 1 0)) (unary 1 1 1 0));<BR>
(= (* (unary 1 1 1 0) (unary 1 1 0)) (unary 1 1 1 1 1 1 0));<BR>
(= (* (unary 1 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(= (* (unary 1 1 1 0) (unary 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 1 0)) (unary 0));<BR>
(= (* (unary 1 1 1 0) (unary 1 0)) (unary 1 1 1 0));<BR>
(= (* (unary 1 1 1 0) (unary 1 1 1 0)) (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(= (* (unary 1 0) (unary 1 1 0)) (unary 1 1 0));<BR>
(= (* (unary 0) (unary 1 0)) (unary 0));<BR>
(= (* (unary 0) (unary 1 1 1 0)) (unary 0));<BR>
<A NAME='10'><FONT COLOR=red># MATH introduce a simple form of binary notation</FONT><BR>
# After this lesson, in the higher-level version of the message,<BR>
# will expand decimal to stand for the binary notation given.<BR>
(= (unary 0) (.));<BR>
(= (unary 1 0) (:));<BR>
(= (unary 1 1 0) (:.));<BR>
(= (unary 1 1 1 0) (::));<BR>
(= (unary 1 1 1 1 0) (:..));<BR>
(= (unary 1 1 1 1 1 0) (:.:));<BR>
(= (unary 1 1 1 1 1 1 0) (::.));<BR>
(= (unary 1 1 1 1 1 1 1 0) (:::));<BR>
(= (unary 1 1 1 1 1 1 1 1 0) (:...));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 0) (:..:));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 0) (:.:.));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 1 0) (:.::));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 1 1 0) (::..));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (::.:));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (:::.));<BR>
(= (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0) (::::));<BR>
(= (::.:) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (::) (unary 1 1 1 0));<BR>
(= (::.:) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (:.:) (unary 1 1 1 1 1 0));<BR>
(= (:..:) (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(= (::.:) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (:.:) (unary 1 1 1 1 1 0));<BR>
(= (::::) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (:..:) (unary 1 1 1 1 1 1 1 1 1 0));<BR>
(= (::.) (unary 1 1 1 1 1 1 0));<BR>
(= (:::) (unary 1 1 1 1 1 1 1 0));<BR>
(= (:..) (unary 1 1 1 1 0));<BR>
(= (::.:) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (:::) (unary 1 1 1 1 1 1 1 0));<BR>
(= (:::.) (unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0));<BR>
(= (:.:) (unary 1 1 1 1 1 0));<BR>
(= (+ (:.) (:.:)) (:::));<BR>
(= (+ (::.) (::.))<BR>
&nbsp;&nbsp;&nbsp;(::..));<BR>
(= (+ (::..) (::))<BR>
&nbsp;&nbsp;&nbsp;(::::));<BR>
(= (+ (:.) (::)) (:.:));<BR>
(= (+ (:...) (:...))<BR>
&nbsp;&nbsp;&nbsp;(:....));<BR>
(= (+ (::.:) (:::.))<BR>
&nbsp;&nbsp;&nbsp;(::.::));<BR>
(= (+ (:::) (:.:.))<BR>
&nbsp;&nbsp;&nbsp;(:...:));<BR>
(= (+ (::..) (:.::))<BR>
&nbsp;&nbsp;&nbsp;(:.:::));<BR>
(= (* (::.:) (:..:))<BR>
&nbsp;&nbsp;&nbsp;(:::.:.:));<BR>
(= (* (::..) (::.:))<BR>
&nbsp;&nbsp;&nbsp;(:..:::..));<BR>
(= (* (::..) (:.:.))<BR>
&nbsp;&nbsp;&nbsp;(::::...));<BR>
(= (* (::..) (::::))<BR>
&nbsp;&nbsp;&nbsp;(:.::.:..));<BR>
(= (* (:) (::.)) (::.));<BR>
(= (* (::.) (:.:.))<BR>
&nbsp;&nbsp;&nbsp;(::::..));<BR>
(= (* (:..) (:::.))<BR>
&nbsp;&nbsp;&nbsp;(:::...));<BR>
(= (* (::::) (:..:))<BR>
&nbsp;&nbsp;&nbsp;(:....:::));<BR>
<A NAME='11'><FONT COLOR=red># MATH demonstrate idea of leaving gaps in an expression</FONT><BR>
# and then filling them in afterwards<BR>
# the examples given leave a lot to be desired!<BR>
((? x (= (+ 2 (x)) 13)) 11);<BR>
((? x (= (+ 11 (x)) 21)) 10);<BR>
((? x (= (+ 9 (x)) 11)) 2);<BR>
((? x (= (+ 12 (x)) 18)) 6);<BR>
((? x (= (+ 6 (x)) 20)) 14);<BR>
((? x (= (+ 8 (x)) 10)) 2);<BR>
((? x (= (+ 11 (x)) 18)) 7);<BR>
((? x (= (+ 8 (x)) 13)) 5);<BR>
(((? x (? y (= (* (x) (y)) 12))) 6) 2);<BR>
(((? x (? y (= (* (x) (y)) 84))) 12) 7);<BR>
(((? x (? y (= (* (x) (y)) 45))) 15) 3);<BR>
(((? x (? y (= (* (x) (y)) 18))) 3) 6);<BR>
(((? x (? y (= (* (x) (y)) 90))) 15) 6);<BR>
(((? x (? y (= (* (x) (y)) 36))) 3) 12);<BR>
(((? x (? y (= (* (x) (y)) 30))) 2) 15);<BR>
(((? x (? y (= (* (x) (y)) 32))) 8) 4);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 11) 1)<BR>
&nbsp;11);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 121) 11)<BR>
&nbsp;11);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 156) 12)<BR>
&nbsp;13);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 16) 2)<BR>
&nbsp;8);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 0) 4) 0);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 108) 12)<BR>
&nbsp;9);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 80) 10)<BR>
&nbsp;8);<BR>
((((? z (? x (? y (= (* (x) (y)) (z))))) 8) 8) 1);<BR>
<A NAME='12'><FONT COLOR=red># MATH show some simple function calls</FONT><BR>
# and show a way to remember functions across statements<BR>
(= ((? square (square 1)) (? x (* (x) (x)))) 1);<BR>
(= ((? square (square 2)) (? x (* (x) (x)))) 4);<BR>
(= ((? square (square 0)) (? x (* (x) (x)))) 0);<BR>
(= ((? square (square 8)) (? x (* (x) (x)))) 64);<BR>
(= ((? square (square 5)) (? x (* (x) (x)))) 25);<BR>
(= ((? square (square 1)) (? x (* (x) (x)))) 1);<BR>
(= ((? square (square 8)) (? x (* (x) (x)))) 64);<BR>
(= ((? square (square 3)) (? x (* (x) (x)))) 9);<BR>
(define square (? x (* (x) (x))));<BR>
(= (square 0) 0);<BR>
(= (square 7) 49);<BR>
(= (square 5) 25);<BR>
(= (square 6) 36);<BR>
(define plusone (? x (+ (x) 1)));<BR>
(= (plusone 7) 8);<BR>
(= (plusone 3) 4);<BR>
(= (plusone 6) 7);<BR>
(= (plusone 9) 10);<BR>
<A NAME='13'><FONT COLOR=red># MATH show mechanisms for branching</FONT><BR>
(intro if);<BR>
(= (if (true) 8 4) 8);<BR>
(= (if (true) 0 0) 0);<BR>
(= (if (true) 2 7) 2);<BR>
(= (if (true) 9 7) 9);<BR>
(= (if (true) 0 3) 0);<BR>
(= (if (true) 0 4) 0);<BR>
(= (if (true) 4 9) 4);<BR>
(= (if (false) 7 9) 9);<BR>
(= (if (false) 0 8) 8);<BR>
(= (if (false) 6 3) 3);<BR>
(= (if (false) 2 8) 8);<BR>
(= (if (false) 0 3) 3);<BR>
(= (if (true) 8 0) 8);<BR>
(= (if (false) 2 1) 1);<BR>
(= (if (true) 4 7) 4);<BR>
(= (if (false) 2 6) 6);<BR>
<A NAME='14'><FONT COLOR=red># MATH some pure lambda calculus definitions - optional</FONT><BR>
# these definitions are not quite what we want<BR>
# since thinking of everything as a function requires headscratching<BR>
# it would be better to use these as a parallel means of evaluation<BR>
# ... for expressions<BR>
(define pure-if (? x (? y (? z (x (y) (z))))));<BR>
(define pure-true (? y (? z (y))));<BR>
(define pure-false (? y (? z (z))));<BR>
(define pure-cons<BR>
&nbsp;&nbsp;(? x (? y (? z (pure-if (z) (x) (y))))));<BR>
(define pure-car (? x (x (pure-true))));<BR>
(define pure-cdr (? x (x (pure-false))));<BR>
(define zero (? f (? x (x))));<BR>
(define one (? f (? x (f (x)))));<BR>
(define two (? f (? x (f (f (x))))));<BR>
(define succ (? n (? f (? x (f ((n (f)) (x)))))));<BR>
(define add (? a (? b ((a (succ)) (b)))));<BR>
(define mult (? a (? b ((a (add (b))) (zero)))));<BR>
(define pred<BR>
&nbsp;&nbsp;(? n<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(pure-cdr<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((n (? p<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pure-cons (succ (pure-car (p))) (pure-car (p)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pure-cons (zero) (zero))))));<BR>
(define is-zero<BR>
&nbsp;&nbsp;(? n ((n (? dummy (pure-false)) (pure-true)))));<BR>
(define fixed-point<BR>
&nbsp;&nbsp;(? f ((? x (f (x (x)))) (? x (f (x (x)))))));<BR>
# .. but for rest of message will assume that define does fixed-point for us<BR>
# now build a link between numbers and church number functions<BR>
(define unchurch (? c (c (? x (+ (x) 1)) 0)));<BR>
(= 0 (unchurch (zero)));<BR>
(= 1 (unchurch (one)));<BR>
(= 2 (unchurch (two)));<BR>
(define church<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= 0 (x)) (zero) (succ (church (- (x) 1))))));<BR>
<A NAME='15'><FONT COLOR=red># MATH show an example of recursive evaluation</FONT><BR>
# skipping over a lot of definitions and desugarings<BR>
(define easy-factorial<BR>
&nbsp;&nbsp;(? f<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x (if (&gt; (x) 0) (* (x) (f (f) (- (x) 1))) 1))));<BR>
(define factorial<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (x) 0) (* (x) (factorial (- (x) 1))) 1)));<BR>
(= (easy-factorial (easy-factorial) 0) 1);<BR>
(= (easy-factorial (easy-factorial) 1) 1);<BR>
(= (easy-factorial (easy-factorial) 2) 2);<BR>
(= (easy-factorial (easy-factorial) 3) 6);<BR>
(= (easy-factorial (easy-factorial) 4) 24);<BR>
(= (easy-factorial (easy-factorial) 5) 120);<BR>
(= (factorial 0) 1);<BR>
(= (factorial 1) 1);<BR>
(= (factorial 2) 2);<BR>
(= (factorial 3) 6);<BR>
(= (factorial 4) 24);<BR>
(= (factorial 5) 120);<BR>
<A NAME='16'><FONT COLOR=red># MATH introduce universal quantifier</FONT><BR>
# really need to link with sets for true correctness<BR>
# and the examples here are REALLY sparse, need much more<BR>
(intro forall);<BR>
(&lt; 5 (+ 5 1));<BR>
(&lt; 4 (+ 4 1));<BR>
(&lt; 3 (+ 3 1));<BR>
(&lt; 2 (+ 2 1));<BR>
(&lt; 1 (+ 1 1));<BR>
(&lt; 0 (+ 0 1));<BR>
(forall (? x (&lt; (x) (+ (x) 1))));<BR>
(&lt; 5 (* 5 2));<BR>
(&lt; 4 (* 4 2));<BR>
(&lt; 3 (* 3 2));<BR>
(&lt; 2 (* 2 2));<BR>
(&lt; 1 (* 1 2));<BR>
(not (&lt; 0 (* 0 2)));<BR>
(not (forall (? x (&lt; (x) (* (x) 2)))));<BR>
<A NAME='17'><FONT COLOR=red># MATH introduce existential quantifier</FONT><BR>
# really need to link with sets for true correctness<BR>
# and the examples here are REALLY sparse, need much more<BR>
(not (= 5 (* 2 2)));<BR>
(= 4 (* 2 2));<BR>
(not (= 3 (* 2 2)));<BR>
(not (= 2 (* 2 2)));<BR>
(not (= 1 (* 2 2)));<BR>
(not (= 0 (* 2 2)));<BR>
(intro exists);<BR>
(exists (? x (= (x) (* 2 2))));<BR>
(not (= 5 (+ 5 2)));<BR>
(not (= 4 (+ 4 2)));<BR>
(not (= 3 (+ 3 2)));<BR>
(not (= 2 (+ 2 2)));<BR>
(not (= 1 (+ 1 2)));<BR>
(not (= 0 (+ 0 2)));<BR>
(not (exists (? x (= (x) (+ (x) 2)))));<BR>
<A NAME='18'><FONT COLOR=red># MATH introduce logical implication</FONT><BR>
(intro =&gt;);<BR>
(define =&gt; (? x (? y (not (and (x) (not (y)))))));<BR>
(=&gt; (true) (true));<BR>
(not (=&gt; (true) (false)));<BR>
(=&gt; (false) (true));<BR>
(=&gt; (false) (false));<BR>
(forall<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(forall<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? y (=&gt; (=&gt; (x) (y)) (=&gt; (not (y)) (not (x))))))));<BR>
<A NAME='19'><FONT COLOR=red># MATH illustrate lists and some list operators</FONT><BR>
# to make list describable as a function, need to preceed lists<BR>
# ... with an argument count<BR>
# lists will be written as [1 2 1] = (list 3 1 2 1) after this lesson<BR>
# it would be nice to include such syntactic sugar in the message but that<BR>
# ... is a fight for another day<BR>
# finally, lists keep an explicit record of their length<BR>
# this is to avoid the need for using a special 'nil' symbol<BR>
# ... which cannot itself be placed in the list.<BR>
#<BR>
<A NAME='20'><FONT COLOR=red># MISSING - intro to cons, car, cdr</FONT><BR>
# used to be pure-cons pure-car pure-cdr but changed for better interface to scheme<BR>
# also should introduce number? check function<BR>
#<BR>
(define list-helper<BR>
&nbsp;&nbsp;(? n<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? ret<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(- (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? y (? z (ret (+ 1 (y)) (cons (x) (z)))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? x (ret 1 (x)))))));<BR>
(define list<BR>
&nbsp;&nbsp;(? n<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (n) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons 0 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-helper (n) (? y (? z (cons (y) (z))))))));<BR>
(define head<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (car (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(undefined)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (car (lst)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cdr (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(car (cdr (lst)))))));<BR>
(define tail<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (car (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(undefined)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (car (lst)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons 0 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons (- (car (lst)) 1) (cdr (cdr (lst))))))));<BR>
(define list-length (? lst (car (lst))));<BR>
(define list-ref<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? n<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-ref (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(undefined)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (n) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref (tail (lst)) (- (n) 1)))))));<BR>
(define prepend<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons 1 (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons (+ (list-length (lst)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons (x) (cdr (lst))))))));<BR>
(define list=<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? y<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-length (x)) (list-length (y)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (= (head (x)) (head (y)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list= (tail (x)) (tail (y))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false)))));<BR>
(= (list-length ((list 1) 3)) 1);<BR>
(= (list-length ((list 8) 9 8 0 4 7 3 6 5)) 8);<BR>
(= (list-length ((list 5) 8 6 4 2 5)) 5);<BR>
(= (list-length ((list 9) 5 8 4 3 9 6 1 7 2)) 9);<BR>
(= (list-length ((list 7) 2 4 9 6 5 0 8)) 7);<BR>
(= (head ((list 8) 12 1 4 13 17 3 10 4)) 12);<BR>
(list= (tail ((list 8) 12 1 4 13 17 3 10 4))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 7) 1 4 13 17 3 10 4));<BR>
(= (head ((list 9) 6 13 15 4 12 1 0 5 6)) 6);<BR>
(list= (tail ((list 9) 6 13 15 4 12 1 0 5 6))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 8) 13 15 4 12 1 0 5 6));<BR>
(= (head ((list 6) 19 4 12 2 15 12)) 19);<BR>
(list= (tail ((list 6) 19 4 12 2 15 12))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 5) 4 12 2 15 12));<BR>
(= (head ((list 10) 3 4 4 2 15 3 17 6 11 3)) 3);<BR>
(list= (tail ((list 10) 3 4 4 2 15 3 17 6 11 3))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 9) 4 4 2 15 3 17 6 11 3));<BR>
(= (head ((list 2) 15 2)) 15);<BR>
(list= (tail ((list 2) 15 2)) ((list 1) 2));<BR>
(= (head ((list 10) 15 12 17 11 0 12 14 8 17 5))<BR>
&nbsp;&nbsp;&nbsp;15);<BR>
(list= (tail ((list 10) 15 12 17 11 0 12 14 8 17 5))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 9) 12 17 11 0 12 14 8 17 5));<BR>
(= (head ((list 5) 11 1 10 7 9)) 11);<BR>
(list= (tail ((list 5) 11 1 10 7 9))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 1 10 7 9));<BR>
(= (head ((list 3) 19 10 14)) 19);<BR>
(list= (tail ((list 3) 19 10 14))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 2) 10 14));<BR>
(= (head ((list 5) 4 2 7 12 18)) 4);<BR>
(list= (tail ((list 5) 4 2 7 12 18))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 2 7 12 18));<BR>
(= (head ((list 5) 13 1 0 5 10)) 13);<BR>
(list= (tail ((list 5) 13 1 0 5 10))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 1 0 5 10));<BR>
(= (list-ref ((list 1) 9) 0) 9);<BR>
(= (list-ref ((list 10) 4 4 14 0 14 4 17 7 3 17) 0)<BR>
&nbsp;&nbsp;&nbsp;4);<BR>
(= (list-ref ((list 8) 10 13 6 14 3 13 9 18) 0)<BR>
&nbsp;&nbsp;&nbsp;10);<BR>
(= (list-ref ((list 4) 3 1 0 2) 2) 0);<BR>
(= (list-ref ((list 5) 13 7 18 13 12) 1) 7);<BR>
(= (list-ref ((list 3) 19 16 9) 2) 9);<BR>
(= (list-ref ((list 5) 12 14 5 14 4) 4) 4);<BR>
(= (list-ref ((list 2) 10 17) 1) 17);<BR>
(= (list-ref ((list 4) 1 12 10 18) 3) 18);<BR>
(= (list-ref ((list 8) 17 7 2 4 19 15 4 9) 0) 17);<BR>
(list= ((list 0)) ((list 0)));<BR>
(list= ((list 1) 7) ((list 1) 7));<BR>
(list= ((list 2) 1 19) ((list 2) 1 19));<BR>
(list= ((list 3) 18 1 18) ((list 3) 18 1 18));<BR>
(list= ((list 4) 13 15 10 6)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 13 15 10 6));<BR>
# this next batch of examples are a bit misleading, should streamline<BR>
(not (list= ((list 0)) ((list 1) 0)));<BR>
(not (list= ((list 0)) ((list 1) 6)));<BR>
(not (list= ((list 1) 9) ((list 2) 6 9)));<BR>
(not (list= ((list 1) 9) ((list 2) 9 7)));<BR>
(not (list= ((list 2) 1 6) ((list 3) 2 1 6)));<BR>
(not (list= ((list 2) 1 6) ((list 3) 1 6 0)));<BR>
(not (list= ((list 3) 10 9 12) ((list 4) 5 10 9 12)));<BR>
(not (list= ((list 3) 10 9 12) ((list 4) 10 9 12 3)));<BR>
(not (list= ((list 4) 17 9 1 0) ((list 5) 4 17 9 1 0)));<BR>
(not (list= ((list 4) 17 9 1 0) ((list 5) 17 9 1 0 4)));<BR>
# some helpful functions<BR>
(list= (prepend 12 ((list 0))) ((list 1) 12));<BR>
(list= (prepend 0 ((list 1) 14)) ((list 2) 0 14));<BR>
(list= (prepend 10 ((list 2) 8 19))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 3) 10 8 19));<BR>
(list= (prepend 12 ((list 3) 10 2 1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 12 10 2 1));<BR>
(list= (prepend 14 ((list 4) 6 16 14 5))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 5) 14 6 16 14 5));<BR>
(list= (prepend 4 ((list 5) 15 2 3 11 8))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 6) 4 15 2 3 11 8));<BR>
(list= (prepend 12 ((list 6) 9 2 19 7 2 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 7) 12 9 2 19 7 2 0));<BR>
(list= (prepend 11 ((list 7) 17 17 2 4 16 5 14))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 8) 11 17 17 2 4 16 5 14));<BR>
(define pair (? x (? y ((list 2) (x) (y)))));<BR>
(define first (? lst (head (lst))));<BR>
(define second (? lst (head (tail (lst)))));<BR>
(list= (pair 3 6) ((list 2) 3 6));<BR>
(= (first (pair 3 6)) 3);<BR>
(= (second (pair 3 6)) 6);<BR>
(list= (pair 8 8) ((list 2) 8 8));<BR>
(= (first (pair 8 8)) 8);<BR>
(= (second (pair 8 8)) 8);<BR>
(list= (pair 9 2) ((list 2) 9 2));<BR>
(= (first (pair 9 2)) 9);<BR>
(= (second (pair 9 2)) 2);<BR>
(define list-find-helper<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? key<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? fail<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? idx<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fail 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (lst)) (key))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(idx)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-find-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(key)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fail)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (idx) 1)))))))));<BR>
(define list-find<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? key<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? fail (list-find-helper (lst) (key) (fail) 0)))));<BR>
(define example-fail (? x 100));<BR>
(= (list-find ((list 1) 15) 15 (example-fail)) 0);<BR>
(= (list-find ((list 2) 9 6) 9 (example-fail)) 0);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 19 7 14 6)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;0);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 8) 10 0 6 9 5 10 2 2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;4);<BR>
(= (list-find ((list 4) 14 5 7 6) 6 (example-fail))<BR>
&nbsp;&nbsp;&nbsp;3);<BR>
(= (list-find ((list 1) 2) 2 (example-fail)) 0);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 7) 19 7 12 4 18 8 7)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;3);<BR>
(= (list-find ((list 1) 2) 2 (example-fail)) 0);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 5 19 13 13)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;1);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 10) 17 14 17 8 6 1 2 12 10 4)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;5);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 4) 15 13 6 17)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;100);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 6) 16 13 10 3 0 19)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;100);<BR>
(= (list-find<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 8) 13 19 4 17 11 9 2 3)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(example-fail))<BR>
&nbsp;&nbsp;&nbsp;100);<BR>
<A NAME='21'><FONT COLOR=red># HACK describe changes to the implicit interpreter to allow new special forms</FONT><BR>
(define base-translate (translate));<BR>
(define translate<BR>
&nbsp;&nbsp;(? x (if (= (x) 10) 15 (base-translate (x)))));<BR>
(= 10 15);<BR>
(= (+ 10 15) 30);<BR>
(define translate (base-translate));<BR>
(not (= 10 15));<BR>
(= (+ 10 15) 25);<BR>
# now can create a special form for lists<BR>
(define translate<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(base-translate (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) vector)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((list 2) list (list-length (tail (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(base-translate (x))))));<BR>
(= (vector 1 2 3) ((list 3) 1 2 3));<BR>
# now to desugar let expressions<BR>
(define translate-with-vector (translate));<BR>
(define translate-let-form<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? body<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-length (x)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate (body))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate-let-form<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector ? (head (head (x))) (body))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (tail (head (x))))))))));<BR>
(define translate<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate-with-vector (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) let)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate-let-form<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (tail (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (tail (tail (x)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate-with-vector (x))))));<BR>
(let ((x 20)) (= (x) 20));<BR>
(let ((x 50) (y 20)) (= (- (x) (y)) 30));<BR>
# the is-list function is now on dubious ground<BR>
# this stuff will be replaced with typing ASAP<BR>
(define is-list (? x (not (number? (x)))));<BR>
(is-list ((list 2) 1 3));<BR>
(is-list ((list 0)));<BR>
(not (is-list 23));<BR>
(is-list<BR>
&nbsp;&nbsp;((list 3) ((list 2) 2 3) 1 (? x (+ (x) 10))));<BR>
<A NAME='22'><FONT COLOR=red># MATH introduce sugar for let</FONT><BR>
# if would be good to introduce desugarings more rigorously, but for now...<BR>
# ... just a very vague sketch<BR>
(intro let);<BR>
(= (let ((x 10)) (+ (x) 5)) ((? x (+ (x) 5)) 10));<BR>
(= (let ((x 10) (y 5)) (+ (x) (y)))<BR>
&nbsp;&nbsp;&nbsp;(((? x (? y (+ (x) (y)))) 10) 5));<BR>
<A NAME='23'><FONT COLOR=red># MATH build up functions of several variables</FONT><BR>
(= ((? x (? y (- (x) (y)))) 12 6) 6);<BR>
(= ((? x (? y (- (x) (y)))) 3 0) 3);<BR>
(= ((? x (? y (- (x) (y)))) 8 7) 1);<BR>
(= ((? x (? y (- (x) (y)))) 7 6) 1);<BR>
(= ((? x (? y (- (x) (y)))) 7 6) 1);<BR>
(define last<BR>
&nbsp;&nbsp;(? x (list-ref (x) (- (list-length (x)) 1))));<BR>
(define except-last<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (head (x)) (except-last (tail (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector))));<BR>
# test last and except-last<BR>
(= 15 (last (vector 4 5 15)));<BR>
(list= (vector 4 5)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(except-last (vector 4 5 15)));<BR>
(intro lambda);<BR>
(define prev-translate (translate));<BR>
(define translate<BR>
&nbsp;&nbsp;(let ((prev (prev-translate)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) lambda)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((formals (head (tail (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(body (head (tail (tail (x))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (formals)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(except-last (formals))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector ? (last (formals)) (body))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate (body))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x)))))));<BR>
# test lambda<BR>
(= (? x (- (x) 5)) (lambda (x) (- (x) 5)));<BR>
(= (? x (? y (- (x) (y))))<BR>
&nbsp;&nbsp;&nbsp;(lambda (x y) (- (x) (y))));<BR>
(= ((lambda (x y) (- (x) (y))) 17 9) 8);<BR>
(= ((lambda (x y) (- (x) (y))) 9 2) 7);<BR>
(= ((lambda (x y) (- (x) (y))) 13 8) 5);<BR>
(= ((lambda (x y) (- (x) (y))) 8 6) 2);<BR>
(= ((lambda (x y) (- (x) (y))) 3 3) 0);<BR>
(define apply<BR>
&nbsp;&nbsp;(lambda (x y)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (list= (y) (vector))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply ((x) (head (y))) (tail (y))))));<BR>
(= (apply (lambda (x y) (- (x) (y))) (vector 12 6))<BR>
&nbsp;&nbsp;&nbsp;6);<BR>
(= (apply (lambda (x y) (- (x) (y))) (vector 10 7))<BR>
&nbsp;&nbsp;&nbsp;3);<BR>
(= (apply (lambda (x y) (- (x) (y))) (vector 12 3))<BR>
&nbsp;&nbsp;&nbsp;9);<BR>
(= (apply (lambda (x y) (- (x) (y))) (vector 6 5))<BR>
&nbsp;&nbsp;&nbsp;1);<BR>
(= (apply (lambda (x y) (- (x) (y))) (vector 0 0))<BR>
&nbsp;&nbsp;&nbsp;0);<BR>
<A NAME='24'><FONT COLOR=red># MATH show map function for applying a function across the elements of a list</FONT><BR>
(define map<BR>
&nbsp;&nbsp;(lambda (p lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (p (head (lst))) (map (p) (tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector))));<BR>
(= (map (? x (* (x) 2)) (vector 3 18 17))<BR>
&nbsp;&nbsp;&nbsp;(vector 6 36 34));<BR>
(= (map (? x (* (x) 2)) (vector 6 11 7 9))<BR>
&nbsp;&nbsp;&nbsp;(vector 12 22 14 18));<BR>
(= (map (? x (* (x) 2)) (vector 6 14 16 1 11))<BR>
&nbsp;&nbsp;&nbsp;(vector 12 28 32 2 22));<BR>
(= (map (? x (* (x) 2)) (vector 13 11 19 9 7 16))<BR>
&nbsp;&nbsp;&nbsp;(vector 26 22 38 18 14 32));<BR>
(= (map (? x 42) (vector 15 3 19))<BR>
&nbsp;&nbsp;&nbsp;(vector 42 42 42));<BR>
(= (map (? x 42) (vector 2 15 6 19))<BR>
&nbsp;&nbsp;&nbsp;(vector 42 42 42 42));<BR>
(= (map (? x 42) (vector 2 9 11 5 13))<BR>
&nbsp;&nbsp;&nbsp;(vector 42 42 42 42 42));<BR>
(= (map (? x 42) (vector 19 12 17 18 5 8))<BR>
&nbsp;&nbsp;&nbsp;(vector 42 42 42 42 42 42));<BR>
(define crunch<BR>
&nbsp;&nbsp;(lambda (p lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt;= (list-length (lst)) 2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(p (head (lst)) (crunch (p) (tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (list-length (lst)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(undefined)))));<BR>
(= (crunch (+) (vector 17 7 18)) 42);<BR>
(= (crunch (+) (vector 19 10 0 11)) 40);<BR>
(= (crunch (+) (vector 7 16 11 8 19)) 61);<BR>
(= (crunch (+) (vector 1 5 14 16 15 19)) 70);<BR>
<A NAME='25'><FONT COLOR=red># MATH introduce mutable objects, and side-effects</FONT><BR>
(intro make-cell);<BR>
(intro set!);<BR>
(intro get!);<BR>
(define demo-mut1 (make-cell 0));<BR>
(set! (demo-mut1) 15);<BR>
(= (get! (demo-mut1)) 15);<BR>
(set! (demo-mut1) 5);<BR>
(set! (demo-mut1) 7);<BR>
(= (get! (demo-mut1)) 7);<BR>
(define demo-mut2 (make-cell 11));<BR>
(= (get! (demo-mut2)) 11);<BR>
(set! (demo-mut2) 22);<BR>
(= (get! (demo-mut2)) 22);<BR>
(= (get! (demo-mut1)) 7);<BR>
(= (+ (get! (demo-mut1)) (get! (demo-mut2))) 29);<BR>
(if (= (get! (demo-mut1)) 7)<BR>
&nbsp;&nbsp;(set! (demo-mut1) 88)<BR>
&nbsp;&nbsp;(set! (demo-mut1) 99));<BR>
(= (get! (demo-mut1)) 88);<BR>
(if (= (get! (demo-mut1)) 7)<BR>
&nbsp;&nbsp;(set! (demo-mut1) 88)<BR>
&nbsp;&nbsp;(set! (demo-mut1) 99));<BR>
(= (get! (demo-mut1)) 99);<BR>
<A NAME='26'><FONT COLOR=red># MATH show how to execute a sequence of instructions</FONT><BR>
(intro begin);<BR>
(define prev-translate (translate));<BR>
(define reverse<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt;= (list-length (x)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (last (x)) (reverse (except-last (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x))));<BR>
# test reverse<BR>
(list= (vector 1 2 3) (reverse (vector 3 2 1)));<BR>
(define translate<BR>
&nbsp;&nbsp;(let ((prev (prev-translate)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) begin)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector ? x (vector head (vector x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend vector (reverse (tail (x))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x)))))));<BR>
(= (begin 1 7 2 4) 4);<BR>
(= (begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut1) 88)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut1) 6)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get! (demo-mut1)))<BR>
&nbsp;&nbsp;&nbsp;6);<BR>
(= (begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut2) 88)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut1) 6)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get! (demo-mut2)))<BR>
&nbsp;&nbsp;&nbsp;88);<BR>
(= (begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut1) 88)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (demo-mut1) 6)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get! (demo-mut1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4)<BR>
&nbsp;&nbsp;&nbsp;4);<BR>
<A NAME='27'><FONT COLOR=red># MATH introduce environment/hashmap structure</FONT><BR>
# this section needs a LOT more examples :-)<BR>
# note that at the time of writing (h 1 2) is same as ((h) 1 2)<BR>
(define hash-add<BR>
&nbsp;&nbsp;(lambda (h x y z) (if (= (z) (x)) (y) (h (z)))));<BR>
(define hash-ref (lambda (h x) (h (x))));<BR>
(define hash-null (? x (undefined)));<BR>
(define test-hash<BR>
&nbsp;&nbsp;(hash-add (hash-add (hash-null) 3 2) 4 9));<BR>
(= (hash-ref (test-hash) 4) 9);<BR>
(= (hash-ref (test-hash) 3) 2);<BR>
(= (hash-ref (test-hash) 8) (undefined));<BR>
(= (hash-ref (test-hash) 15) (undefined));<BR>
(= (hash-ref (hash-add (test-hash) 15 33) 15) 33);<BR>
(= (hash-ref (test-hash) 15) (undefined));<BR>
(define make-hash<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (list= (x) (vector))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(hash-null)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(hash-add<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash (tail (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first (head (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(second (head (x)))))));<BR>
(= (hash-ref<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (pair 3 10) (pair 2 20) (pair 1 30)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3)<BR>
&nbsp;&nbsp;&nbsp;10);<BR>
(= (hash-ref<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (pair 3 10) (pair 2 20) (pair 1 30)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1)<BR>
&nbsp;&nbsp;&nbsp;30);<BR>
<A NAME='28'><FONT COLOR=red># OBJECT introduce simple mutable structures</FONT><BR>
(define mutable-struct<BR>
&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(let ((data (map (? x (make-cell 0)) (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? key<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref (data) (list-find (lst) (key) (? x 0)))))));<BR>
(define test-struct1<BR>
&nbsp;&nbsp;(mutable-struct (vector item1 item2 item3)));<BR>
(set! (test-struct1 item1) 15);<BR>
(= (get! (test-struct1 item1)) 15);<BR>
<A NAME='29'><FONT COLOR=red># OBJECT introduce method handler wrappers</FONT><BR>
(define add-method<BR>
&nbsp;&nbsp;(lambda (object name method)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(hash-add<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(name)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? dummy (method (object))))));<BR>
(define call (? x (x 0)));<BR>
(define test-struct2<BR>
&nbsp;&nbsp;(mutable-struct (vector x y)));<BR>
(set! (test-struct2 x) 10);<BR>
(set! (test-struct2 y) 20);<BR>
(= (get! (test-struct2 x)) 10);<BR>
(= (get! (test-struct2 y)) 20);<BR>
(define test-struct3<BR>
&nbsp;&nbsp;(add-method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(test-struct2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sum<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? self (+ (get! (self x)) (get! (self y))))));<BR>
(= (get! (test-struct3 x)) 10);<BR>
(= (get! (test-struct3 y)) 20);<BR>
(= (call (test-struct3 sum)) 30);<BR>
(set! (test-struct3 y) 10);<BR>
(= (call (test-struct3 sum)) 20);<BR>
(set! (test-struct2 y) 5);<BR>
(= (call (test-struct3 sum)) 15);<BR>
<A NAME='30'><FONT COLOR=red># TURING introduce turing machine model</FONT><BR>
# just for fun!<BR>
(define safe-tail<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (false)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? vector (false)))));<BR>
(define safe-head<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 0) (head (x)) (false))));<BR>
(define tape-read<BR>
&nbsp;&nbsp;(? tape<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(let ((x (second (tape))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 0) (head (x)) (false)))));<BR>
(define tape-transition<BR>
&nbsp;&nbsp;(lambda (tape shift value)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (shift) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (prepend (value) (first (tape)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(safe-tail (second (tape))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (shift) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (safe-tail (first (tape)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(safe-head (first (tape)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (value) (safe-tail (second (tape))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (first (tape))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (value) (safe-tail (second (tape)))))))));<BR>
(define turing<BR>
&nbsp;&nbsp;(lambda (machine current last tape)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (current) (last))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tape)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((next (machine (current) (tape-read (tape)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(turing<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(machine)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref (next) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(last)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tape-transition<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tape)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref (next) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref (next) 2)))))));<BR>
(define make-tape (? x (pair (vector) (x))));<BR>
(define remove-trail<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (last (lst)) (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-trail (x) (except-last (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst)))));<BR>
(define extract-tape<BR>
&nbsp;&nbsp;(? x (remove-trail (false) (second (x)))));<BR>
(define tm-binary-increment<BR>
&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair right<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 0 (vector right 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 1 (vector right 1 1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (false) (vector inc 0 (false))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair inc<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 0 (vector noinc 0 1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 1 (vector inc 0 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (false) (vector halt 2 1)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair noinc<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-hash<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 0 (vector noinc 0 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair 1 (vector noinc 0 1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair (false) (vector halt 1 (false))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(pair halt (make-hash (vector))))));<BR>
(= (extract-tape<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(turing<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tm-binary-increment)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;halt<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-tape (vector 1 0 0 1))))<BR>
&nbsp;&nbsp;&nbsp;(vector 1 0 1 0));<BR>
(= (extract-tape<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(turing<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tm-binary-increment)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;halt<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-tape (vector 1 1 1))))<BR>
&nbsp;&nbsp;&nbsp;(vector 1 0 0 0));<BR>
(= (extract-tape<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(turing<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tm-binary-increment)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;right<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;halt<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-tape (vector 1 1 1 0 0 0 1 1 1))))<BR>
&nbsp;&nbsp;&nbsp;(vector 1 1 1 0 0 1 0 0 0));<BR>
<A NAME='31'><FONT COLOR=red># MATH introduce sets and set membership</FONT><BR>
(intro element);<BR>
(define element<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not (= (list-find (lst) (x) (? y (false))) (false))))));<BR>
(element 9 (vector 7 9 5 6));<BR>
(element 6 (vector 7 9 5 6));<BR>
(element 7 (vector 7 9 5 6));<BR>
(element 9 (vector 7 1 9 2 4));<BR>
(element 1 (vector 7 1 9 2 4));<BR>
(element 9 (vector 7 1 9 2 4));<BR>
(element 2 (vector 7 8 0 9 2 6));<BR>
(element 9 (vector 7 8 0 9 2 6));<BR>
(element 0 (vector 7 8 0 9 2 6));<BR>
(element 1 (vector 9 1 3 6));<BR>
(element 1 (vector 9 1 3 6));<BR>
(element 1 (vector 9 1 3 6));<BR>
(element 4 (vector 8 1 2 3 4));<BR>
(element 8 (vector 8 1 2 3 4));<BR>
(element 1 (vector 8 1 2 3 4));<BR>
(not (element 0 (vector 8 2 3 5)));<BR>
(not (element 8 (vector 0 1 3 5)));<BR>
(not (element 0 (vector 8 3 4)));<BR>
(not (element 7 (vector 8 4 5 6)));<BR>
(not (element 7 (vector 0 9 2 3)));<BR>
# rules for set equality<BR>
(define set-subset<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? y<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (x)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (element (head (x)) (y))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set-subset (tail (x)) (y)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true)))));<BR>
(define set=<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? y<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (set-subset (x) (y)) (set-subset (y) (x))))));<BR>
(set= (vector 1 5 9) (vector 5 1 9));<BR>
(set= (vector 1 5 9) (vector 9 1 5));<BR>
(not (set= (vector 1 5 9) (vector 1 5)));<BR>
# let's go leave ourselves wide open to Russell's paradox<BR>
# ... by using characteristic functions<BR>
# ... since it doesn't really matter for communication purposes<BR>
# ... and so far this is just used/tested with sets of integers really<BR>
(element 5 (all (? x (= (+ (x) 10) 15))));<BR>
(element 3 (all (? x (= (* (x) 3) (+ (x) 6)))));<BR>
(define empty-set (vector));<BR>
(element 0 (natural-set));<BR>
(forall<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(=&gt; (element (x) (natural-set))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(element (+ (x) 1) (natural-set)))));<BR>
(element 1 (natural-set));<BR>
(element 2 (natural-set));<BR>
(element 3 (natural-set));<BR>
(element 4 (natural-set));<BR>
(element 5 (natural-set));<BR>
(element 6 (natural-set));<BR>
(element 7 (natural-set));<BR>
(element 8 (natural-set));<BR>
(element 9 (natural-set));<BR>
(not (element (true) (natural-set)));<BR>
(not (element (false) (natural-set)));<BR>
(define boolean-set (vector (true) (false)));<BR>
(element (true) (boolean-set));<BR>
(element (false) (boolean-set));<BR>
(not (element 0 (boolean-set)));<BR>
(define even-natural-set<BR>
&nbsp;&nbsp;(all (? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(exists<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? y<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (element (y) (natural-set))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (* 2 (y)) (x))))))));<BR>
(element 0 (natural-set));<BR>
(element 0 (even-natural-set));<BR>
(element 1 (natural-set));<BR>
(not (element 1 (even-natural-set)));<BR>
(element 2 (natural-set));<BR>
(element 2 (even-natural-set));<BR>
(element 3 (natural-set));<BR>
(not (element 3 (even-natural-set)));<BR>
(element 4 (natural-set));<BR>
(element 4 (even-natural-set));<BR>
(element 5 (natural-set));<BR>
(not (element 5 (even-natural-set)));<BR>
(element 6 (natural-set));<BR>
(element 6 (even-natural-set));<BR>
<A NAME='32'><FONT COLOR=red># MATH introduce graph structures</FONT><BR>
(define make-graph<BR>
&nbsp;&nbsp;(lambda (nodes links) (pair (nodes) (links))));<BR>
(define test-graph<BR>
&nbsp;&nbsp;(make-graph<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(vector 1 2 3 4)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(vector (vector 1 2) (vector 2 3) (vector 1 4))));<BR>
(define graph-linked<BR>
&nbsp;&nbsp;(lambda (g n1 n2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(exists<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? idx<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (and (&gt;= (idx) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&lt; (idx) (list-length (list-ref (g) 1))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list= (list-ref (list-ref (g) 1) (idx))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (n1) (n2)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false))))));<BR>
(= (graph-linked (test-graph) 1 2) (true));<BR>
(= (graph-linked (test-graph) 1 3) (false));<BR>
(= (graph-linked (test-graph) 2 4) (false));<BR>
# 'if' is used a lot in the next definition in place of and/or<BR>
# this is because I haven't established lazy evaluation forms for and/or<BR>
# so this very inefficient algorithm completely bogs down when combined<BR>
# ... during testing with a dumb implementation for 'exists'.<BR>
(define graph-linked*<BR>
&nbsp;&nbsp;(lambda (g n1 n2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (= (n1) (n2))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (graph-linked (g) (n1) (n2))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(true)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(exists<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? n3<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (graph-linked (g) (n1) (n3))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(graph-linked* (g) (n3) (n2))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false))))))));<BR>
(= (graph-linked* (test-graph) 1 2) (true));<BR>
(= (graph-linked* (test-graph) 1 3) (true));<BR>
(= (graph-linked* (test-graph) 2 4) (false));<BR>
<A NAME='33'><FONT COLOR=red># OBJECT introduce simple form of typing, for ease of documentation.</FONT><BR>
# An object is simply a function that takes an argument.<BR>
# The argument is the method to call on the object.<BR>
# Types are here taken to be just the existence of a particular method,<BR>
# with that method returning an object of the appropriate type.<BR>
(define make-integer<BR>
&nbsp;&nbsp;(lambda (v) (lambda (x) (if (= (x) int) (v) 0))));<BR>
(define objectify<BR>
&nbsp;&nbsp;(? x (if (number? (x)) (make-integer (x)) (x))));<BR>
(define instanceof<BR>
&nbsp;&nbsp;(lambda (t t)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (t))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(= (t) int)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(not (number? ((objectify (t)) (t)))))));<BR>
# add version of lambda that allows types to be declared<BR>
(define prev-translate (translate));<BR>
(define translate<BR>
&nbsp;&nbsp;(let ((prev (prev-translate)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) lambda)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((formals (head (tail (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(body (head (tail (tail (x))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (formals)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (last (formals)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(except-last (formals))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector ? (last (formals)) (body))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((formal-name (first (last (formals))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(formal-type (second (last (formals)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(except-last (formals))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(formal-name)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(formal-name)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector objectify (vector (formal-name)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(formal-type))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(body)))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate (body))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x)))))));<BR>
# add conditional form<BR>
(define prev-translate (translate));<BR>
(define translate<BR>
&nbsp;&nbsp;(let ((prev (prev-translate)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) cond)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((cnd (head (tail (x)))) (rem (tail (tail (x)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (rem)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first (cnd))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(second (cnd))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend cond (rem))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate (cnd))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x)))))));<BR>
(= 99 (cond 99));<BR>
(= 8 (cond ((true) 8) 11));<BR>
(= 11 (cond ((false) 8) 11));<BR>
(= 7 (cond ((false) 3) ((true) 7) 11));<BR>
(= 3 (cond ((true) 3) ((true) 7) 11));<BR>
(= 11 (cond ((false) 3) ((false) 7) 11));<BR>
(define remove-match<BR>
&nbsp;&nbsp;(lambda (test lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-match (test) (tail (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-match (test) (tail (lst)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))));<BR>
(define remove-element<BR>
&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(remove-match (lambda (y) (= (y) (x))))));<BR>
(list= (vector 1 2 3 5)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-element 4 (vector 1 2 3 4 5)));<BR>
(list= (vector 1 2 3 5)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-element 4 (vector 1 4 2 4 3 4 5)));<BR>
(define return<BR>
&nbsp;&nbsp;(lambda (t t)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(let ((obj (objectify (t)))) (obj (t)))));<BR>
(define tester<BR>
&nbsp;&nbsp;(lambda ((x int) (y int))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(return int (+ (x) (y)))));<BR>
(= 42<BR>
&nbsp;&nbsp;&nbsp;(tester (make-integer 10) (make-integer 32)));<BR>
(= 42 (tester 10 32));<BR>
(define reflective<BR>
&nbsp;&nbsp;(lambda (f)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;((lambda (x) (f (lambda (y) ((x (x)) (y)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x) (f (lambda (y) ((x (x)) (y))))))));<BR>
<A NAME='34'><FONT COLOR=red># OBJECT an example object -- a 2D point</FONT><BR>
(define point<BR>
&nbsp;&nbsp;(lambda (x y)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(reflective<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (self msg)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((= (msg) x) (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) y) (y))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) point) (self))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) +)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((p point))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(point (+ (x) (p x)) (+ (y) (p y)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) =)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((p point))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (= (x) (p x)) (= (y) (p y)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)))));<BR>
(define point1 (point 1 11));<BR>
(define point2 (point 2 22));<BR>
(= 1 (point1 x));<BR>
(= 22 (point2 y));<BR>
(= 11 ((point 11 12) x));<BR>
(= 11 (((point 11 12) point) x));<BR>
(= 16 (((point 16 17) point) x));<BR>
(= 33 (point1 + (point2) y));<BR>
(point1 + (point2) = (point 3 33));<BR>
(point2 + (point1) = (point 3 33));<BR>
((point 100 200)<BR>
&nbsp;+<BR>
&nbsp;(point 200 100)<BR>
&nbsp;=<BR>
&nbsp;(point 300 300));<BR>
(instanceof point (point1));<BR>
(not (instanceof int (point1)));<BR>
(instanceof int 5);<BR>
(not (instanceof point 5));<BR>
<A NAME='35'><FONT COLOR=red># OBJECT an example object -- a container</FONT><BR>
(define container<BR>
&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(let ((contents (make-cell (vector))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reflective<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (self msg)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((= (msg) container) (self))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) inventory) (get! (contents)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) add)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (not (element (x) (get! (contents))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (contents) (prepend (x) (get! (contents))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) remove)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set! (contents)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove-element (x) (get! (contents))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) =)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((c container))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(set= (self inventory) (c inventory))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0))))));<BR>
# Can pass anything to container function to create an object<BR>
# Should eventually use a consistent protocol for all objects,<BR>
# but all this stuff is still in flux<BR>
(define pocket (container new));<BR>
(pocket add 77);<BR>
(pocket add 88);<BR>
(pocket add 99);<BR>
(set= (pocket inventory) (vector 77 88 99));<BR>
(pocket remove 88);<BR>
(set= (pocket inventory) (vector 77 99));<BR>
(define pocket2 (container new));<BR>
(pocket2 add 77);<BR>
(pocket2 add 99);<BR>
(pocket2 = (pocket));<BR>
<A NAME='36'><FONT COLOR=red># OBJECT expressing inheritance</FONT><BR>
# counter-container adds one method to container: count<BR>
(define counter-container<BR>
&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(let ((super (container new)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reflective<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (self msg)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((= (msg) counter-container) (self))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((= (msg) count) (list-length (super inventory)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(super (msg))))))));<BR>
(define cc1 (counter-container new));<BR>
(= 0 (cc1 count));<BR>
(cc1 add 4);<BR>
(= 1 (cc1 count));<BR>
(cc1 add 5);<BR>
(= 2 (cc1 count));<BR>
<A NAME='37'><FONT COLOR=red># OBJECT adding a special form for classes</FONT><BR>
# need a bunch of extra machinery first, will push this<BR>
# back into previous sections eventually, and simplify<BR>
(define list-append<BR>
&nbsp;&nbsp;(lambda (lst1 lst2)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst1)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-append<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(except-last (lst1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (last (lst1)) (lst2)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst2))));<BR>
(= (list-append (vector 1 2 3) (vector 4 5 6))<BR>
&nbsp;&nbsp;&nbsp;(vector 1 2 3 4 5 6));<BR>
(define append<BR>
&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? lst<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend (head (lst)) (append (x) (tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (x))))));<BR>
(= (append 5 (vector 1 2)) (vector 1 2 5));<BR>
(define select-match<BR>
&nbsp;&nbsp;(lambda (test lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(head (lst))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match (test) (tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match (test) (tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))));<BR>
(define unique<BR>
&nbsp;&nbsp;(let ((store (make-cell 0)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((id (get! (store))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(begin (set! (store) (+ (id) 1)) (id))))));<BR>
(= (unique new) 0);<BR>
(= (unique new) 1);<BR>
(= (unique new) 2);<BR>
(not (= (unique new) (unique new)));<BR>
# okay, here it comes.  don't panic!<BR>
# I need to split this up into helpers, and simplify.<BR>
# It basically just writes code for classes like we saw in<BR>
# a previous section.<BR>
(define prev-translate (translate));<BR>
(define translate<BR>
&nbsp;&nbsp;(let ((prev (prev-translate)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (number? (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (head (x)) class)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((name (list-ref (x) 1))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(args (list-ref (x) 2))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fields (tail (tail (tail (x))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(translate<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;define<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(name)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend method (args))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(append<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector unique-id (vector unique new))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (tail)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? x (= (first (x)) field))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fields))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reflective<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self method)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-append<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prepend<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-append<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector method)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(second (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (tail)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? x (= (first (x)) method))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fields))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (? x<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (second)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(? x (= (first (x)) field))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fields))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) self)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) (name))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self self))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) unknown)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector lambda (vector x) 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector (vector = (vector method) new) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) unique-id)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector unique-id))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector = (vector method) ==)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lambda<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector unique-id)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector x unique-id))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self unknown (vector method))))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self (vector method))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector self))))))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(prev (x)))))));<BR>
# revisit the point class example<BR>
(class point<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(x y)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method x (x))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method y (y))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((p point))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(point new (+ (x) (p x)) (+ (y) (p y)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((p point))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and (= (x) (p x)) (= (y) (p y))))));<BR>
# note the appearance of new in the next line --<BR>
# this is the only difference to previous version<BR>
(define point1 (point new 1 11));<BR>
(define point2 (point new 2 22));<BR>
(= 1 (point1 x));<BR>
(= 22 (point2 y));<BR>
(= 11 ((point new 11 12) x));<BR>
(= 11 (((point new 11 12) point) x));<BR>
(= 16 (((point new 16 17) point) x));<BR>
(= 33 (point1 + (point2) y));<BR>
(point1 + (point2) = (point new 3 33));<BR>
(point2 + (point1) = (point new 3 33));<BR>
((point new 100 200)<BR>
&nbsp;+<BR>
&nbsp;(point new 200 100)<BR>
&nbsp;=<BR>
&nbsp;(point new 300 300));<BR>
(instanceof point (point1));<BR>
(not (instanceof int (point1)));<BR>
<A NAME='38'><FONT COLOR=red># OBJECT wrapper class for cells</FONT><BR>
(class cell<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(initial-value)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field content (make-cell (initial-value)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method get (get! (content)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (new-value) (set! (content) (new-value))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method reset (self set (initial-value)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unknown<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x) ((objectify (self get)) (x)))));<BR>
(define cell-test1 (cell new 15));<BR>
(= 15 (cell-test1 get));<BR>
(cell-test1 set 82);<BR>
(= 82 (cell-test1 get));<BR>
(define cell-test2<BR>
&nbsp;&nbsp;(cell new (point new 120 150)));<BR>
(define cell-test3<BR>
&nbsp;&nbsp;(cell new (point new 300 300)));<BR>
(cell-test2 + (cell-test3) = (point new 420 450));<BR>
(not (cell-test2 = (cell-test3)));<BR>
(cell-test3 set (cell-test2));<BR>
(cell-test2 = (cell-test3));<BR>
<A NAME='39'><FONT COLOR=red># MUD playing around with doors and rooms</FONT><BR>
(class door<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((src room) (dest room))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(begin (src add (self)) (dest add (self))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access-from<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((current room))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((current == (src)) (dest))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((current == (dest)) (src))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is-present<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((current room))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond ((current == (src)) (true))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((current == (dest)) (true))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false)))));<BR>
(class room<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field content (container new))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method unknown (lambda (x) (content (x)))));<BR>
# need to fix up containers to use object equality<BR>
(define object-element<BR>
&nbsp;&nbsp;(lambda (n lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(&gt; (list-length<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-match (lambda (x) (x == (n))) (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0)));<BR>
(class container<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field contents (cell new (vector)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method inventory (contents get))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (not (object-element (x) (contents get)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(contents set (prepend (x) (contents get)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(false)))));<BR>
(define hall (room new));<BR>
(define kitchen (room new));<BR>
(define door1 (door new (hall) (kitchen)));<BR>
((first (hall inventory)) == (door1));<BR>
((first (kitchen inventory)) == (door1));<BR>
(door1 access-from (hall) == (kitchen));<BR>
(not (door1 access-from (hall) == (hall)));<BR>
(door1 access-from (kitchen) == (hall));<BR>
(define lawn (room new));<BR>
(define stairs (room new));<BR>
(define bedroom (room new));<BR>
(define nowhere (room new));<BR>
(define door2 (door new (hall) (lawn)));<BR>
(define door3 (door new (hall) (stairs)));<BR>
(define door4 (door new (stairs) (bedroom)));<BR>
(class character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field location (cell new (nowhere)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set-room<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((r room)) (location set (r))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method get-room (location get))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method update 0));<BR>
(define find-max-helper<BR>
&nbsp;&nbsp;(lambda (test max idx n lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (test (head (lst))) (max))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-max-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(n)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-max-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(max)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(idx)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(idx))));<BR>
(define find-max-idx<BR>
&nbsp;&nbsp;(lambda (test lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(find-max-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))));<BR>
(define find-min-helper<BR>
&nbsp;&nbsp;(lambda (test max idx n lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&gt; (list-length (lst)) 0)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (&lt; (test (head (lst))) (max))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-min-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(n)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-min-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(max)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(idx)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (n) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(tail (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(idx))));<BR>
(define find-min-idx<BR>
&nbsp;&nbsp;(lambda (test lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(find-min-helper<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(test (head (lst)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))));<BR>
(= 2<BR>
&nbsp;&nbsp;&nbsp;(find-max-idx (lambda (x) (x)) (vector 3 4 5 0)));<BR>
(= 1<BR>
&nbsp;&nbsp;&nbsp;(find-max-idx (lambda (x) (x)) (vector 3 5 4 0)));<BR>
(= 0<BR>
&nbsp;&nbsp;&nbsp;(find-max-idx (lambda (x) (x)) (vector 5 3 4 0)));<BR>
# the robo class makes a character that patrols from room to room<BR>
(class robo<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field super (character new))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field timestamp (cell new 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(field timestamp-map (cell new (lambda (x) 0)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method unknown (lambda (x) (super (x))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(method<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((exits (select-match<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda (x) (instanceof door (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(self location inventory))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((timestamps<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map (lambda (x) (timestamp-map get (x)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(exits))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let ((chosen-exit<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list-ref<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(exits)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(find-min-idx (lambda (x) (x)) (timestamps))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current-tmap (timestamp-map get))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current-t (timestamp get)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(self location<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(chosen-exit access-from (self location get)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(timestamp-map<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((d door))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (d == (chosen-exit))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current-t)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current-tmap (d)))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(timestamp set (+ (timestamp get) 1))))))));<BR>
(define myrobo (robo new));<BR>
(myrobo set-room (stairs));<BR>
(define which-room<BR>
&nbsp;&nbsp;(lambda ((rr robo))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(find-max-idx<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lambda ((r room)) (if (r == (rr get-room)) 1 0))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(hall)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kitchen)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(stairs)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lawn)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(bedroom)))));<BR>
(define sequencer<BR>
&nbsp;&nbsp;(lambda (n current lst)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;(if (&lt; (current) (n))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(begin<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(myrobo update)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sequencer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(n)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(+ (current) 1)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(append (which-room (myrobo)) (lst))))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(lst))));<BR>
# here is a list of the first 30 rooms the robot character visits<BR>
# 0=hall, 1=kitchen, 2=stairs, 3=lawn, 4=bedroom<BR>
(list= (sequencer 30 0 (vector))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(vector<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1));<BR>
# Now should start to introduce a language to talk about what is<BR>
# going on in the simulated world, and start to move away from<BR>
# detailed mechanism<BR>
</TT></BODY>
</HTML>
