 : lisp-var? ( lisp-symbol -- ? )
     dup lisp-symbol? [ name>> lisp-env get key? ] [ drop f ] if ;
     
-: funcall-arg-list ( args -- newargs )    
-    [ ] [ dup \ funcall = [ drop 2 cut* [ funcall ] compose call ] when suffix ] reduce ;
-    
 : funcall ( quot sym -- * )
-    [ funcall-arg-list ] dip
+    [ 1array [ call ] with-datastack >quotation ] dip
     dup lisp-symbol? [ lookup-var ] when curry call ; inline
     
 : define-primitive ( name vocab word -- )  

     [ 1quotation ]
    } cond ;
    
: compile-form ( lisp-ast -- quot )
    convert-form lambda-rewrite call ; inline
    
: macro-expand ( cons -- quot )
    uncons [ list>seq [ ] like ] [ lookup-macro lambda-rewrite call ] bi* call compile-form call ;
    
: lisp-string>factor ( str -- quot )
    lisp-expr compile-form ;

DEFER: lisp-var?
DEFER: macro-expand
DEFER: define-lisp-macro
    
! Functions to convert s-exps to quotations
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
