
Expression types:
- atom   (a, b etc.)
- string   : "string"
- integer  : (1, 2, 3, -5 etc.)
- rational : (1/2 , -1/2 etc.)
- predicates : t for true, nil for false. () evaluates to nil too.


Existing functions in minilisp:

* and
* append
* arg
* arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
* arglist
* atom
* head
  Return first element of list.
  
* tail
  return list with first element dropped.
  
* cond
* cons
* define
* eq
* equal
* eval
* exit
  leave interactive read_eval_print

* expt
* fixp
* gc
  Garbage-collect.
  
* goto
* greaterp
* lessp
* list
* load
  Load a file (example: (load "file") )
  
* ncar
* not
* null
* numberp
* onep
* or
* pcars
* plus
  add arguments.

* prin
* print
* product
* product1
* prog
* quote
  Return argument unevaluated.

* quotient
* return
* reverse
  return reversed list.
  
* setq
  Set a variable to a value, quoted (so it will not be evaluated next time).
  example: (setq a (plus 2 3)) will set a to 5.

* sum
* sum1
* subst
* terpri
* times
* while
* zerop




