Merge branch 'master' of git://factorcode.org/git/jamesnvc
commit
30b07346eb
|
@ -13,8 +13,6 @@ IN: lisp.test
|
||||||
"+" "math" "+" define-primitive
|
"+" "math" "+" define-primitive
|
||||||
"-" "math" "-" define-primitive
|
"-" "math" "-" define-primitive
|
||||||
|
|
||||||
! "list" [ >array ] lisp-define
|
|
||||||
|
|
||||||
{ 5 } [
|
{ 5 } [
|
||||||
[ 2 3 ] "+" <lisp-symbol> funcall
|
[ 2 3 ] "+" <lisp-symbol> funcall
|
||||||
] unit-test
|
] unit-test
|
||||||
|
@ -55,8 +53,4 @@ IN: lisp.test
|
||||||
"((lambda (x) (if x (begin (+ 1 2)) (- 3 5))) #t)" lisp-eval
|
"((lambda (x) (if x (begin (+ 1 2)) (- 3 5))) #t)" lisp-eval
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! { { 1 2 3 4 5 } } [
|
|
||||||
! "(list 1 2 3 4 5)" lisp-eval
|
|
||||||
! ] unit-test
|
|
||||||
|
|
||||||
] with-interactive-vocabs
|
] with-interactive-vocabs
|
||||||
|
|
|
@ -59,10 +59,23 @@ PRIVATE>
|
||||||
: convert-unquoted ( cons -- quot )
|
: convert-unquoted ( cons -- quot )
|
||||||
"unquote not valid outside of quasiquote!" throw ;
|
"unquote not valid outside of quasiquote!" throw ;
|
||||||
|
|
||||||
: convert-quasiquoted ( cons -- newcons )
|
: convert-unquoted-splicing ( cons -- quot )
|
||||||
|
"unquote-splicing not valid outside of quasiquote!" throw ;
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
: quasiquote-unquote ( cons -- newcons )
|
||||||
[ { [ dup list? ] [ car dup lisp-symbol? ] [ name>> "unquote" equal? dup ] } && nip ]
|
[ { [ dup list? ] [ car dup lisp-symbol? ] [ name>> "unquote" equal? dup ] } && nip ]
|
||||||
[ cadr ] traverse ;
|
[ cadr ] traverse ;
|
||||||
|
|
||||||
|
: quasiquote-unquote-splicing ( cons -- newcons )
|
||||||
|
[ { [ dup list? ] [ dup cdr [ cons? ] [ car cons? ] bi and ]
|
||||||
|
[ dup cadr car lisp-symbol? ] [ cadr car name>> "unquote-splicing" equal? dup ] } && nip ]
|
||||||
|
[ dup cadr cdr >>cdr ] traverse ;
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
: convert-quasiquoted ( cons -- newcons )
|
||||||
|
quasiquote-unquote quasiquote-unquote-splicing ;
|
||||||
|
|
||||||
: convert-defmacro ( cons -- quot )
|
: convert-defmacro ( cons -- quot )
|
||||||
cdr [ car ] keep [ convert-lambda ] [ car name>> ] bi define-lisp-macro 1quotation ;
|
cdr [ car ] keep [ convert-lambda ] [ car name>> ] bi define-lisp-macro 1quotation ;
|
||||||
|
|
||||||
|
@ -72,6 +85,7 @@ PRIVATE>
|
||||||
{ "defmacro" [ convert-defmacro ] }
|
{ "defmacro" [ convert-defmacro ] }
|
||||||
{ "quote" [ convert-quoted ] }
|
{ "quote" [ convert-quoted ] }
|
||||||
{ "unquote" [ convert-unquoted ] }
|
{ "unquote" [ convert-unquoted ] }
|
||||||
|
{ "unquote-splicing" [ convert-unquoted-splicing ] }
|
||||||
{ "quasiquote" [ convert-quasiquoted ] }
|
{ "quasiquote" [ convert-quasiquoted ] }
|
||||||
{ "begin" [ convert-begin ] }
|
{ "begin" [ convert-begin ] }
|
||||||
{ "cond" [ convert-cond ] }
|
{ "cond" [ convert-cond ] }
|
||||||
|
@ -99,7 +113,7 @@ PRIVATE>
|
||||||
call ; inline
|
call ; inline
|
||||||
|
|
||||||
: macro-expand ( cons -- quot )
|
: macro-expand ( cons -- quot )
|
||||||
uncons [ list>seq [ ] like ] [ lookup-macro macro-call compile-form ] bi* call ;
|
uncons [ list>seq [ ] like ] [ lookup-macro macro-call compile-form ] bi* ;
|
||||||
|
|
||||||
: lisp-string>factor ( str -- quot )
|
: lisp-string>factor ( str -- quot )
|
||||||
lisp-expr parse-result-ast compile-form ;
|
lisp-expr parse-result-ast compile-form ;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: lazy-lists.examples lazy-lists tools.test ;
|
USING: lists.lazy.examples lazy-lists tools.test ;
|
||||||
IN: lazy-lists.examples.tests
|
IN: lists.lazy.examples.tests
|
||||||
|
|
||||||
[ { 1 3 5 7 } ] [ 4 odds ltake list>array ] unit-test
|
[ { 1 3 5 7 } ] [ 4 odds ltake list>array ] unit-test
|
||||||
[ { 0 1 4 9 16 } ] [ first-five-squares ] unit-test
|
[ { 0 1 4 9 16 } ] [ first-five-squares ] unit-test
|
||||||
|
|
Loading…
Reference in New Issue