- 
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 abinopdatatype 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
  thewithis bound only in the body of thewithexpression.  There will be zero or more
  identifiers bound by eachwith.  Syntax:
 
  {with {{<id> <expr>}
         {<id> <expr>}
         ...} 
    <expr>}
   
- 
conditionals
 
- 
  
  Add if0using the syntax described in class.  This
  saves the bother of adding boolean values and operators over them.
  Note thatif0has three branches: a test expression, a
  "then" expression which evaluates if the test expression evaluates
  to0, 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 recconstruct.  Each named expression can
  access all the identifiers bound by therec.  The named
  expressions must all syntactically be functions.  There will be zero
  or more identifiers bound by eachrec.  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.