www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
Mlisp2li.lisp | 8++++++++
Mmeval.lisp | 2+-
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)