% (boolean? #t)
(List [(Id "boolean?");(Bool true)])
% (boolean? 3)
(List [(Id "boolean?");(Num 3)])
% (define three 3)
(List [(Id "define");(Id "three");(Num 3)])
% three
(Id "three")
% (+ three 4)
(List [(Id "+");(Id "three");(Num 4)])
% (define add-two (lambda (n) (+ n 2)))
(List [(Id "define");(Id "add-two");(List [(Id "lambda");(List [(Id "n")]);(List [(Id "+");(Id "n");(Num 2)])])])
% (add-two 5)
(List [(Id "add-two");(Num 5)])
% (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1))))))
(List [(Id "define");(Id "fact");(List [(Id "lambda");(List [(Id "n")]);(List [(Id "if");(List [(Id "=");(Id "n");(Num 0)]);(Num 1);(List [(Id "*");(Id "n");(List [(Id "fact");(List [(Id "-");(Id "n");(Num 1)])])])])])])
% (fact 3)
(List [(Id "fact");(Num 3)])
% (fact 5)
(List [(Id "fact");(Num 5)])
