diff --git a/extra/lisp/lisp.factor b/extra/lisp/lisp.factor index 616efcbb1d..00d7b3cf95 100644 --- a/extra/lisp/lisp.factor +++ b/extra/lisp/lisp.factor @@ -60,10 +60,18 @@ PRIVATE> : convert-quoted ( cons -- quot ) cdr 1quotation ; +: convert-unquoted ( cons -- quot ) + "unquote not valid outside of quasiquote!" throw ; + +: convert-quasiquoted ( cons -- newcons ) + [ ] traverse ; + : form-dispatch ( lisp-symbol -- quot ) name>> { { "lambda" [ convert-lambda ] } { "quote" [ convert-quoted ] } + { "unquote" [ convert-unquoted ] } + { "quasiquote" [ convert-quasiquoted ] } { "if" [ convert-if ] } { "begin" [ convert-begin ] } { "cond" [ convert-cond ] } @@ -125,4 +133,4 @@ M: no-such-var summary drop "No such variable" ; name>> macro-env get at ; : lisp-macro? ( car -- ? ) - dup lisp-symbol? [ name>> macro-env get key? ] [ drop f ] if ; \ No newline at end of file + dup lisp-symbol? [ name>> macro-env get key? ] [ drop f ] if ;