Re: wie in lisp defun durch setf ersetzen?
Von: Rainer Weikusat (rweikusat@mssgmbh.com) [Profil]
Datum: 03.11.2007 08:25
Message-ID: <87ir4jvlik.fsf@fever.mssgmbh.com>
Newsgroup: de.comp.lang.misc
Datum: 03.11.2007 08:25
Message-ID: <87ir4jvlik.fsf@fever.mssgmbh.com>
Newsgroup: de.comp.lang.misc
Hermann Riemann <nospam.comp07d4@hermann-riemann.de> writes: >>>(setf add1 (list (list 'x) (list '+ 1 'x))) >>>liefert ((X) (+ 1 X)) >>>Aber wie mach ich das, was ich mit add0 gemacht habe, > >> Ich weiß nicht, ob ich die Frage richtig verstanden habe. > > (car add1) > liefert (X) > > (cadr add1) > liefert (+ 1 X) > > ((lambda (x) (+ 1 x)) 1) > liefert 2 > > ((lamda (car add1) (cadr add1)) 1) > liefert die Fehlermeldung: Zu wenig Argumente für :LAMBDA > > Wenn es funktionieren würde, wäre es das was ich haben will: > Die Ausführung einer beliebigen Funktion, > die nicht als Funktion deklariert ist, > sondern als Liste (Argumentliste Funktionsausdruck) > in einer Variable gespeichert ist. [1]> (setq add1 '((x) (+ x 1))) ((X) (+ X 1)) [2]> (defmacro make-f (l) `(lambda ,@(eval l))) MAKE-F [3]> (make-f add1) #<FUNCTION :LAMBDA (X) (+ X 1)> [4]> (funcall (make-f add1) 9) 10 [5]>[ Auf dieses Posting antworten ]
