; .EnTete "Le_Lisp version 15.2" " " "Version 16 to 15 Facility" ; .Titre "Version 16 to 15 Facility" ; .Auteur "Je'ro^me Chailloux" ; .Centre "$Header: v16tov15.ll,v 1.2 88/12/16 11:27:55 gallou Exp $" ;;; This library permits to compile and to run programs written ;;; with the Version 16 of Le-Lisp, in the version 15.2. (synonym 'dynamic-let 'let) (df dynamic (name) (symeval name)) (defmacro-open dynamic (name) `(progn ,name)) ;; Lists manipulations (defmacro push (x l) `(newl ,l ,x)) ; Peux mieux faire !!! (defmacro pop (l) `(nextl ,l)) ;; Multiples values simulation ; ca ne tient qu'a un 1/2 cheveux mais ca marche dans les cas non vicieux!?! (defvar *values-list-results* ()) (defvar *print-values* t) (defmacro values l `(progn (setq *values-list-results* ()) ,@(mapcar #'(lambda (i) `(push ,i *values-list-results*)) l) (setq *values-list-results* (nreverse *values-list-results*)) (when *print-values* (print *values-list-results*)) (car *values-list-results*))) (defmacro multiple-value-bind (lvars lvalues . body) `(let ((*print-values* ())) (let ((*values-list-results* ())) ,lvalues (letv ',lvars (prog1 *values-list-results* (setq *values-list-results* ())) ,@body)))) (defmacro multiple-value-setq (lvars lvalues . body) `(let ((*print-values* ())) (let ((*values-list-results* ())) ,lvalues ,@(mapcar (lambda (x) `(setq ,x (nextl *values-list-results*))) lvars) (setq *values-list-results* ()) ,@body)))