anchor.diff:                                      eprintf "Function %A expected a list of arguments, received %A" fname sexp
                                       raise (new  ArgumentException())))
   
  +//Evaluates if form 
   let eval_if (ctx:Context) eval condition if_true if_false =
       match (eval ctx condition) with
       | Atom (Symbol "nil") -> eval ctx if_false
       | List [] -> eval ctx if_false
       | _ -> eval ctx if_true
   
  +//Evaluates list exp
   let eval_list (context:Context) eval list =
       match list with
       |List [] -> List [] //Special case for empty list
  
positive.code:     |List list -> apply context (List.head list) (List (List.map (eval context) (List.tail list)))
      | _ -> list
  
  let eval_quote quote =
      match quote with
      |Quote (List []) -> List [] //special case for empty quoted list
      |Quote literal -> literal
      | _ -> quote //should not be matched, anyway
  
  let rec eval context sexp =
      match sexp with
      |Atom _ -> eval_atom context sexp
  
negative.code:             raise (new ArgumentException())
      | _ -> atom //should not be matched, anyway
  
  //Evaluates defun form
  let eval_defun (gctx:Context) eval fname llist body =
      let arity = List.length llist
      let args = List.map (function |Atom v -> v| _ -> Symbol "nil") llist
  