- 
numbers
 
 
 - 
  
  Same as before.
  
  
 - 
binary arithmetic operators
 
 
 - 
  
  In place of having separate rules for + and
  -, define a single syntactic rule for binary arithmetic
  operators.  Parse these into a binop datatype variant.
  Define a table that maps operator names (symbols) to actual
  functions (Scheme procedures) that perform the corresponding
  operation.  For now, define multiplication and division also (using
  * and / to represent them in the source).
  Having a single rule like this, accompanied by a table, makes your
  language easier to extend: once you have modified your parser and
  interpreter once to support binary operators, you won't need to
  touch either one to add any number of new ones.
  
  
 - 
multi-armed 
with
  
 - 
  
  Implement a multi-armed with.  Each identifier bound by
  the with is bound only in the body of the
  with expression.  There will be zero or more
  identifiers bound by each with.  Syntax:
   
  {with {{<id> <expr>}
         {<id> <expr>}
         ...} 
    <expr>}
   
  
  
 - 
conditionals
 
 
 - 
  
  Add if0 using the syntax described in class.  This
  saves the bother of adding boolean values and operators over them.
  Note that if0 has three branches: a test expression, a
  "then" expression which evaluates if the test expression evaluates
  to 0, and an "else" expression that evaluates
  otherwise.
  
  
 - 
multi-argument 
fun
  
 - 
  
  Change the datatype so that a function has a list of arguments, not
  just one.  All arguments to the function evaluate in the same
  environment.  You may assume that the number of arguments in a
  function invocation matches the number in the procedure definition.
  
  
 - 
multi-armed 
rec
  
 - 
  
  Using the datatype definition of environments, implement a
  multi-armed rec construct.  Each named expression can
  access all the identifiers bound by the rec.  The named
  expressions must all syntactically be functions.  There will be zero
  or more identifiers bound by each rec.  Syntax:
   
  {rec {{<id> {fun {<id>} <expr>}} 
        {<id> {fun {<id>} <expr>}}
        ...}
    <expr>}
   
Example:
   
  {with {{true 1}
	 {false 0}}
    {rec {{odd? {fun {n}
		  {if0 n
		       false
		       {even? {- n 1}}}}}
	  {even? {fun {n}
		   {if0 n
			true
			{odd? {- n 1}}}}}}
      {odd? 5}}}
   
should evaluate to 
   
  1
   
representing truth.