       { "cond" [ convert-cond ] }
      [ drop convert-general-form ]
     } case ;
-    
-: convert-list-form ( cons -- quot )  
+
+: convert-list-form ( cons -- quot )
     dup car
     { { [ dup lisp-macro?  ] [ drop macro-expand ] }
-      { [ dup lisp-symbol? ] [ form-dispatch ] } 
+      { [ dup lisp-symbol? ] [ form-dispatch ] }
      [ drop convert-general-form ]
     } cond ;
-    
+
 : convert-form ( lisp-form -- quot )
     {
       { [ dup cons? ] [ convert-list-form ] }

      { [ dup lisp-symbol? ] [ '[ , lookup-var ] ] }
     [ 1quotation ]
    } cond ;
    
: lisp-string>factor ( str -- quot )
    lisp-expr compile-form ;
    
: lisp-eval ( str -- * )    
  lisp-string>factor call ;
    
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SYMBOL: lisp-env
SYMBOL: macro-env
    
ERROR: no-such-var variable-name ;
M: no-such-var summary drop "No such variable" ;


DEFER: lisp-macro?
DEFER: lisp-var?
DEFER: define-lisp-macro

! Functions to convert s-exps to quotations
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: convert-body ( cons -- quot )
    [ ] [ convert-form compose ] foldl ; inline

: convert-cond ( cons -- quot )
    cdr [ 2car [ convert-form ] bi@ 2array ]
    { } lmap-as '[ , cond ] ;

: convert-general-form ( cons -- quot )
    uncons [ convert-body ] [ convert-form ] bi* '[ , @ funcall ] ;

! words for convert-lambda
<PRIVATE
: localize-body ( assoc body -- assoc newbody )
    {
      { [ dup list? ] [ [ lisp-symbol? ] pick '[ [ name>> , at ] [ ] bi or ] traverse ] }
      { [ dup lisp-symbol? ] [ name>> over at ] }
