]> gitweb.factorcode.org Git - factor.git/commitdiff
Fixing defun, adding test for it
authorJames Cash <james.nvc@gmail.com>
Mon, 15 Sep 2008 01:28:36 +0000 (21:28 -0400)
committerJames Cash <james.nvc@gmail.com>
Thu, 6 Nov 2008 05:20:51 +0000 (00:20 -0500)
extra/lisp/lisp-tests.factor
extra/lisp/lisp.factor

index 6e586bc65794d84de95f256ba27c286b1cd73a4e..9ddd31cde03871d79df6719ac2a062620baee738 100644 (file)
@@ -85,9 +85,8 @@ IN: lisp.test
     ] unit-test
     
     {  { 3 3 4 } } [
-        <LISP (setq foo (lambda (x y &rest z)
-                            (cons (+ x y) z)))
-
+        <LISP (defun foo (x y &rest z)
+                  (cons (+ x y) z))
               (foo 1 2 3 4)
         LISP> cons>seq
     ] unit-test
index e60529caab7511587c8ef3b6ac532255145dfc3d..4a933501e8705b0f075d3de13ef3cfe41c36d348 100644 (file)
@@ -64,14 +64,9 @@ PRIVATE>
 : macro-expand ( cons -- quot )
     uncons [ list>seq >quotation ] [ lookup-macro ] bi* call call ;
 
-<PRIVATE
-: (expand-macros) ( cons -- cons )
-    [ dup list? [ (expand-macros) dup car lisp-macro? [ macro-expand ] when ] when ] lmap ;
-PRIVATE>
-
 : expand-macros ( cons -- cons )
-    dup list? [ (expand-macros) dup car lisp-macro? [ macro-expand ] when ] when ;
-
+    dup list? [ [ expand-macros ] lmap dup car lisp-macro? [ macro-expand expand-macros ] when ] when ;
+    
 : convert-begin ( cons -- quot )
     cdr [ convert-form ] [ ] lmap-as [ 1 tail* ] [ but-last ] bi
     [ '[ { } _ with-datastack drop ] ] map prepend '[ _ [ call ] each ] ;
@@ -169,15 +164,15 @@ M: no-such-var summary drop "No such variable" ;
 
    "set" "lisp" "define-lisp-var" define-primitive
     
-   "(lambda (&rest xs) xs)" lisp-string>factor first "list" lisp-define
-   "(defmacro setq (var val) (list (quote set) (list (quote quote) var) val))" lisp-eval
+   "(set 'list (lambda (&rest xs) xs))" lisp-eval
+   "(defmacro setq (var val) (list 'set (list 'quote var) val))" lisp-eval
     
    <" (defmacro defun (name vars &rest body)
-        (list (quote setq) name (list (quote lambda) vars body))) "> lisp-eval
+        (list 'setq name (cons 'lambda (cons vars body)))) "> lisp-eval
     
-   "(defmacro if (pred tr fl) (list (quote cond) (list pred tr) (list (quote #t) fl)))" lisp-eval
+   "(defmacro if (pred tr fl) (list 'cond (list pred tr) (list (quote #t) fl)))" lisp-eval
    ;
 
 : <LISP 
-    "LISP>" parse-multiline-string define-lisp-builtins
-    lisp-string>factor parsed \ call parsed ; parsing
+    "LISP>" parse-multiline-string "(begin " prepend ")" append define-lisp-builtins
+    lisp-string>factor parsed \ call parsed ; parsing
\ No newline at end of file