commit fd2e4073d3e511c89651811edf1139df5de686e3
parent 6d79577cc1bf3c840cd5510dc2678279e355544d
Author: Bertrand BRUN <bertrand.brun@me.com>
Date: Wed, 10 Nov 2010 15:17:00 +0100
Ajout du cas du let* dans le lisp2li
Diffstat:
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/lisp2li.lisp b/lisp2li.lisp
@@ -143,6 +143,14 @@ par le compilateur et par l’interpréteur"
,(lisp2li value env))))
names values)
,(lisp2li (implicit-progn body) new-env)))))
+ ((eq 'let* (car expr))
+ (cond-match expr
+ (((? (eq x 'let*)) :bindings () :body _*)
+ (lisp2li (implicit-progn body) env))
+ (((? (eq x 'let*)) :bindings ((:name $ :value _) :rest ($ _)*) :body _*)
+ (lisp2li `(let ((,name ,value))
+ (let* ,rest
+ ,@body)) env))))
;; defun
((eq 'defun (car expr))
`(:call set-defun (:const . ,(second expr))
diff --git a/meval.lisp b/meval.lisp
@@ -109,7 +109,7 @@ d’arguments dans un certain environnement."
(let ((sub-env (get-env-num num-env env)))
(if sub-env
(aref sub-env index)
- (error "The variable unbound" expr))))
+ (error "The variable unbound : ~w" expr))))
((:nil :if :predicat @. :expr1 @. :expr2 @.)
(if (meval predicat env)
(meval expr1 env)