Formularz eval powinien oceniać daną formę w zerowym środowisku leksykalnym, nie rozumiem tego, czego oczekuję
Powiedzmy, że mam specjalną var:
(defvar x 20)
wtedy robię co następuje:
(let ((x 1)) (eval '(+ x 1))
który ocenia na 2.
Zgodnie z CLHS, eval „Ocenia formę w bieżącym dynamicznym środowisku i zerowym środowisku leksykalnym”. Spodziewałbym się więc uzyskać 21 zamiast 2.
Czy czegoś mi brakuje?
Teraz, jeśli nie mam powiązania dynamicznego dla symbolu y, ocenianie
(let ((y 1)) (eval '(+ y 1))
Dostaję warunek: „Zmienna Y jest niezwiązana”, co ma sens, ponieważ nie ma dynamicznego wiązania dla y.
Uwaga: Używam SBCL 1.0.57
Doceń swoją pomoc z góry!