+ R> drop ['] expand goto-deferred
+;
+
+: expand-definition ( exp -- result )
+ define-symbol 2swap
+
+ 2dup definition-var
+ 2swap definition-val expand
+ nil ( define var val' nil )
+
+ cons cons cons ;
+
+: expand-assignment ( exp -- result )
+ set!-symbol 2swap
+
+ 2dup assignment-var
+ 2swap assignment-val expand
+ nil ( define var val' nil )
+
+ cons cons cons ;
+
+:noname ( exp -- result )
+
+ expand-macro
+
+ quote? if exit then
+
+ quasiquote? if expand-quasiquote exit then
+
+ definition? if expand-definition exit then
+
+ assignment? if expand-assignment exit then
+
+ macro-definition? if expand-define-macro exit then
+
+ if? if expand-if exit then
+
+ lambda? if expand-lambda exit then
+
+ begin? if expand-begin exit then
+
+ application? if expand-application exit then
+
+; is expand