From be4cc36e127e9079410dc756666148b0373e033b Mon Sep 17 00:00:00 2001 From: James Cash Date: Thu, 5 Jun 2008 04:14:26 -0400 Subject: [PATCH] Implementing quasiquotes for lisp --- extra/lisp/lisp.factor | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/extra/lisp/lisp.factor b/extra/lisp/lisp.factor index 00d7b3cf95..6193c3b33e 100644 --- a/extra/lisp/lisp.factor +++ b/extra/lisp/lisp.factor @@ -16,7 +16,7 @@ DEFER: macro-call ! Functions to convert s-exps to quotations ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : convert-body ( cons -- quot ) - [ ] [ convert-form compose ] lreduce ; inline + [ ] [ convert-form compose ] foldl ; inline : convert-if ( cons -- quot ) cdr 3car [ convert-form ] tri@ '[ @ , , if ] ; @@ -64,7 +64,8 @@ PRIVATE> "unquote not valid outside of quasiquote!" throw ; : convert-quasiquoted ( cons -- newcons ) - [ ] traverse ; + [ { [ dup list? ] [ car dup lisp-symbol? ] [ name>> "unquote" equal? dup ] } && nip ] + [ cadr ] traverse ; : form-dispatch ( lisp-symbol -- quot ) name>>