Also versuche ich einen Interpreter zu konstruieren, der benutzerdefinierte Lambda-Funktionen handhaben kann, die eine variable Anzahl von Argumenten haben können. Code sieht ein wenig wie folgt aus:Warum werden die Funktionswerte nicht an die Lambda-Funktion übergeben und ausgewertet?
((lambda (x &optional y z) (func_body)) args))
Gerade jetzt, das Ergebnis, das ich die richtige Funktion bekommen, ohne sie ausgewertet wird; Was ich suche ist die obige Funktion
(* X X)
nach ausgewertet werden: zum Beispiel, erhalte ich, wenn ich square X = (* X X)
und betreibe meine Dolmetscher definieren. Ich habe versucht Dinge wie:
(let ((func (lambda (x &optional y z) (func_body))))
(apply/funcall func args))
((lambda (x &optional y z) (func_body)) args)
Allerdings ergeben sie immer noch ein Ergebnis, das ich nicht nachher bin. Ich versuche, es so zu haben, wenn ich square X = (* X X)
definieren, und setzte in (square 4)
ich:
16
Jede Anleitung, was ich fehle?
edit: Die args-Klausel wird von (cdr/car Y)
oder einer anderen Funktion generiert. Wenn ich versuche, eine Lambda-Liste mit einer Funktion zu erstellen, beklagt sich Lisp, dass es kein Symbol ist, irgendeine Idee, warum das sein könnte?
Ich sollte erwähnen, dass die args-Klausel durch (cdr/car Y) oder eine andere Funktion generiert wird. Ein Großteil der Lambda-Funktion ist jetzt, dass ich darüber nachdenke.Im Grunde liest die Befehlszeile so etwas wie '> 'Quadrat X = (* X X)' Quadrat 4' Ergebnis:'> 16' – KMK
verwenden 'coerce', siehe bearbeiten. – sds
Vielen Dank! – KMK