Ok, here is the exact assignment.  

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><b style=""><u><span style="font-size: 14pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA"><br></span></u></b></p>
<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><b style=""><u><span style="font-size: 14pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">Tiny Scheme Details</span></u></b><b style=""><span style="font-size: 14pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">:</span></b><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA"> The Scheme or LISP
that you are going to implement should include the following primitives:</span></p>

<p class="MsoNormal" style="margin: 0in 0in 0.0001pt 0.5in; text-align: justify; line-height: normal;"><b style=""><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">T,
NIL, CAR, CDR, CONS, ATOM, EQ, NULL, INT,</span></b></p>

<p class="MsoNormal" style="margin: 0in 0in 0.0001pt 0.5in; text-align: justify; line-height: normal;"><b style=""><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">PLUS,
MINUS, TIMES, LESS, GREATER COND, QUOTE, DEFINE.</span></b></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">T and
NIL represent true and false. In general atoms may be identifiers or integers.
An identifier will start with a letter of the alphabet, and maybe followed by
one or more letters or digits; only uppercase letters will be used. No
underscores or other characters are allowed in identifiers. Integers may be
signed or unsigned,</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">i.e.,
25, +25, &minus;25 are all legal.</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">&nbsp;</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">CAR,
CDR, CONS are the standard Scheme primitive functions. ATOM returns T if its
argument is atomic, and returns NIL otherwise. INT returns T if its argument is
an atom that is a number. EQ works only on atomic arguments; it returns T if
its two atomic arguments are the same [or equal, for numbers] and NIL otherwise.
NULL returns T if its argument is NIL and NIL otherwise (non-atomic arguments
should be acceptable to NULL).</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">PLUS,
MINUS etc., take two numbers [integers] as their arguments and return the
result [an integer]. LESS and GREATER allow you to compare two integers and
return T if the first is less or greater than the second respectively.</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">&nbsp;</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">COND
and QUOTE are the standard Scheme forms. DEFINE allows the user to define a new
function and use it later. A function definition looks like</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">(define
(f x) fb )</span></p>

<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA"><span style="">&nbsp;</span></span></p>


<p class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;"><span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;serif&quot;;" lang="EN-CA">where
f is the function being defined; its formal parameter(s) is named x; and its
body is the Scheme expression fb. When this is &ldquo;evaluated&rdquo;, it should add a
pair (f . ((X Y) . fb)) to the d-list [the list of definitions that your
interpreter should maintain internally; actually, how you store function
definitions on the d-list is up to you; the above is only one possibility]. The
features of Tiny Scheme that have not been included are: LAMBDA, LABEL. These
are not needed because Define is sufficient for defining new functions.</span></p>

<br>I thought it would be easier to post it all instead of trying to explain it.<br><br><div class="gmail_quote">On 9 November 2010 15:37, John Clements <span dir="ltr">&lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im"><br>
On Nov 9, 2010, at 12:32 PM, Peter Breitsprecher wrote:<br>
<br>
&gt; Ok, here is the code I have written so far for the function I am having trouble with...<br>
&gt;<br>
&gt; (define (rep-loop)<br>
&gt; &nbsp; (newline)<br>
&gt; &nbsp; (display &quot;repl&gt;&quot;)<br>
&gt; &nbsp; (read-token))<br>
<br>
</div>I&#39;m going to ignore rep-loop.<br>
<div class="im"><br>
&gt;<br>
&gt; (define (read-token)<br>
&gt; &nbsp; (let ((expr (read-char)))<br>
&gt; &nbsp; &nbsp; ((cond [(char-whitespace? expr) (read-token1)]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(eq? expr #\() (read-token2)]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(eq? expr #\)) (read-token3)]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(char-alphabetic? expr) (read-token4)]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[(char-numeric? expr) (read-token5)]<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[else (display &quot;Exiting Loop&quot;)]))))<br>
<br>
</div>Okay! we&#39;ve got a name: read-token.<br>
<br>
The way it&#39;s written, it&#39;s going to be very hard to test. &nbsp;This is because it operates on typed-in input.<br>
<br>
This program would be much easier to develop if you could write a function that accepts strings as input. &nbsp;Can we break the problem up this way?<br>
<font color="#888888"><br>
John Clements<br>
</font><div><div></div><div class="h5"><br>
<br>
&gt; The cond calls other functions I have written just so I could see it if was reading the output letter by letter... &nbsp;Now I need to make read-token read the whole word if it sees a character and the entire number if it sees a number.<br>

&gt;<br>
&gt; Is that getting closer?<br>
&gt;<br>
&gt; On 9 November 2010 15:28, John Clements &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt; wrote:<br>
&gt;<br>
&gt; On Nov 9, 2010, at 12:27 PM, Peter Breitsprecher wrote:<br>
&gt;<br>
&gt; &gt; I&#39;d lie but no.. I was just trying to clarify what I was looking for. &nbsp;I gave a the code for one of the functions I had written, and then an example of the input the user is giving below, and then tried to describe in more detail what I needed help with...<br>

&gt;<br>
&gt; Well, I&#39;m glad you&#39;re not lying :).<br>
&gt;<br>
&gt; Can you start by picking a name for the function that you&#39;re trying to write?<br>
&gt;<br>
&gt; John Clements<br>
&gt;<br>
&gt;<br>
&gt; &gt; On 9 November 2010 15:23, Shriram Krishnamurthi &lt;<a href="mailto:sk@cs.brown.edu">sk@cs.brown.edu</a>&gt; wrote:<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; That would not be considered an &quot;example&quot; for at least two reasons. Do you see why?<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;&gt; On Nov 9, 2010 12:17 PM, &quot;Peter Breitsprecher&quot; &lt;<a href="mailto:pkbreits@lakeheadu.ca">pkbreits@lakeheadu.ca</a>&gt; wrote:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; As an example, I want have most of the functions for Plus, Minus already written.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Here is the code for it.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; (define (plus num1 num2)<br>
&gt; &gt;&gt; (+ num1 num2))<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; That is childs stuff... &nbsp;Here is where I am having the problem, and please keep in mind I am new to DrRacket...<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; If my program accepts input such as<br>
&gt; &gt;&gt; (plus 13 5)<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; I need to parse it so that I know what it is asking for. &nbsp;If It is a left parent, then I need to move on, if it is a right parent, move on to the next character, once i get to the next character I can see it is an alphanumeric character, but then I need to somehow read the whole word, so that I can store that value in a variable so that I can read the next number. &nbsp;If the numbers are single digits, it is easy, because they are only one charater each and read-char works perfect, but I need something like a read-word, or read-number and I can&#39;t seem to figure out how to do it.<br>

&gt; &gt;&gt;<br>
&gt; &gt;&gt; So really I need to know how do I read the words when there are characters present, and read the whole numbers when there is a number present.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; On 9 November 2010 15:00, John Clements &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt; wrote:<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt; &gt; On Nov 9, 2010, a...<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt; Kurt Breitsprecher<br>
&gt; &gt;&gt; (807) 474-9601<br>
&gt; &gt;&gt; <a href="mailto:pkbreits@lakeheadu.ca">pkbreits@lakeheadu.ca</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; _________________________________________________<br>
&gt; &gt;&gt; &nbsp;For list-related administrative tasks:<br>
&gt; &gt;&gt; &nbsp;<a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Kurt Breitsprecher<br>
&gt; &gt; (807) 474-9601<br>
&gt; &gt; <a href="mailto:pkbreits@lakeheadu.ca">pkbreits@lakeheadu.ca</a><br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Kurt Breitsprecher<br>
&gt; (807) 474-9601<br>
&gt; <a href="mailto:pkbreits@lakeheadu.ca">pkbreits@lakeheadu.ca</a><br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div>Kurt Breitsprecher</div>
<div>(807) 474-9601</div>
<div><a href="mailto:pkbreits@lakeheadu.ca" target="_blank">pkbreits@lakeheadu.ca</a></div><br>