(* * Defintion of a Lisp value datatype, which is one of t, nil, number, string, * symbolic atom, or (recursively) list. *) datatype lispVal = T | (* Lisp t as an ML enumeration literal *) NIL | (* Lisp nil as an ML enumeration literal *) N of int | (* Lisp number as an ML int (who cares about reals)*) S of string | (* Lisp string as an ML string *) A of string | (* Lisp symbolic atom as an ML string *) L of lispVal list; (* Lisp list as an ML list *) (* * Using this datatype, the following Lisp list * * ( 10 20 'x "hi there" t 'y (30 40 50 (60 70)) nil 80 ) * * is represented by the following ML value: * *) L[N(10), N(20), A("x"), S("hi there"), T, A("y"), L[N(30), N(40), N(50), L[N(60), N(70)]], NIL, N(80)]; g