2016-12-11 2 views
0

Wie evaluieren einige Lisp-Code mit eval in nicht null lexikalische Umgebung? Ich benötige diese Funktion für die richtige Interpolationsfunktionalität.Nicht null lexikalische Umgebung für Eval

+4

Es ist nicht möglich, aber Sie sollten vielleicht Ihre Frage auf das eigentliche Problem und nicht auf Ihre Probleme hinsichtlich Ihrer gewählten Lösung ändern, da dies wie ein XY-Problem riecht. – Sylwester

+0

Ok, danke, eigentlich musste ich nur sicher sein, dass es keinen Weg gibt, wie es geht. Eigentlich habe ich beschlossen, eine Hash-Tabelle mit Werten zu senden, anstatt auf die Umgebung zuzugreifen. – Seraph

Antwort

1

Wenn Sie Ihre Umgebung als Bindungen, wie sie in let gefunden Modell:

((x 3) (y 2)) 

... dann können Sie jede Form auswerten f mit diesen Bindungen an Ort und Stelle, etwa so:

(eval `(let ,e ,f)) 

Dies ist der einfachste Fall, aber Sie können Ihre Daten problemlos in diese Syntax konvertieren. Sie können auch Funktionen, Makros usw. bei Bedarf binden.

Beachten Sie, dass dynamische Bindungen besser sind, wenn Sie zur Laufzeit Werte benötigen. Sie können Hash-Tabellen usw. verwenden, aber beachten Sie, dass auch die weniger bekannten ist PROGV Sonder Betreiber:

unter anderem progv ist nützlich, wenn Dolmetscher für Sprachen eingebettet in Lisp zu schreiben; Es bietet eine Handhabe für den Mechanismus zum Binden dynamischer Variablen.

Verwandte Themen