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!

questionAnswers(2)

yourAnswerToTheQuestion