2016-12-11 53 views
0

如何使用eval在not null詞法環境中評估一些lisp代碼?我需要此功能才能正確插入功能。eval的not null詞法環境

+4

這是不可能的,但是你也許應該改變你的問題到實際的問題,而不是你的問題,因爲你的選擇的解決方案,因爲這氣味像XY問題。 – Sylwester

+0

好的,謝謝,實際上,我只是需要確保沒有辦法如何做到這一點。實際上,我決定發送值而不是訪問環境的哈希表。 – Seraph

回答

1

如果您的環境模擬像那些let發現綁定:

((x 3) (y 2)) 

...那麼你就可以用這些綁定到位評估任何形式f,就像這樣:

(eval `(let ,e ,f)) 

這是最簡單的情況,但您可以輕鬆地將數據轉換爲適合該語法。如果需要,您還可以綁定函數,宏等。

請注意,如果您在運行時需要值,那麼動態綁定可能更好。您可以使用哈希表等,但請注意,也有鮮爲人知的PROGV特殊的運算符:

在其他方面,寫作嵌入的Lisp語言的口譯時progv是有用的;它提供了綁定動態變量的機制的句柄。