Update 13. Jul 2007: Die Syntax des Makros FN hat sich in der Version 0.2.0 aufgrund von problematischem ursprünglichem Design entscheidend geändert . Dieser Blogeintrag ist damit nur noch von historischer Bedeutung. Bitte lesen Sie für korrekte Informationen den Eintrag über die neue Version der Mulkutils.

Ich habe ein kleines Makro geschrieben, das es leichter machen soll, Lambdaausdrücke in Common Lisp zu schreiben. Anstelle von (lambda (x y z &rest stuff) (+ y z)) heißt es ab jetzt für mich nur noch wahlweise (fn + _1 _2) oder (fn (+ _1 _2)). Wenn das mal keine Verbesserung ist!

Das Paket sollte ASDF-installierbar sein. Falls ich keine Fehler gemacht habe, lautet der dazu nötige Befehl wie folgt:

(asdf-install:install "http://matthias.benkard.de/code/mulkutils-0.0.1.tar.gz") 

Ich reproduziere hier als kleine Einführung einfach den Kommentar am Anfang der Datei:

#| Basic usage  
 | ===========  
 |  
 | (fn + _ 10)  
 | (fn (+ _ 10))  
 | (fn + _0 _1)  
 | (fn + _ _1)  
 | (mapcar (fn (cons _ _)) '(1 2 3))     ;=> ((1 . 1) (2 . 2) (3 . 3))  
 | (funcall (fn + _ 10 _3) 20 30 40 50)  ;=> 80  
 |  
 |  
 | Simple variant FN1  
 | ==================  
 |  
 | (funcall (fn () _) 42)                ;=> 42  
 | (funcall (fn _) 42)                   ;=> error (usually)  
 | (funcall (fn1 _) 42)                  ;=> 42  
 | (funcall (fn +))                      ;=> 0  
 | (funcall (fn1 +))                     ;=> value of +  
 |  
 |  
 | Argument-number-safe variant EFN  
 | ================================  
 |  
 | (funcall (fn (fn () _)))              ;=> #<LAMBDA ...>  
 | (funcall (efn (efn () _)))            ;=> error  
 | (funcall (fn1 (fn1 _)))               ;=> #<LAMBDA ...>  
 | (funcall (efn1 (efn1 _)))             ;=> error  
 |#