nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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 ]