LINUX.ORG.RU

scheme, lexical binding


0

0

> (define a 1)
#<unspecified>
> (let ((a 2)) (eval (eval 'a)))
1

    Это корректное поведение? 
    Т.е. если требуется вычислить значение переменной, имя которой не
было известно во время лексического анализа, значит она считается глобальной?


★★★★★

Стандарт описывает только eval с обязательным указанем environment
http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_idx_578
Так что это implementation-specific поведение. Скорее всего у тебя mzscheme. Он по имитирует (eval expression (interaction-environment)) из стандарта.
http://download.plt-scheme.org/doc/360/html/mzscheme/mzscheme-Z-H-14.html#nod...
http://download.plt-scheme.org/doc/360/html/mzscheme/mzscheme-Z-H-7.html#node...

grob ★★★★★
()

В CL все работает интуитивно.

CL-USER> (defvar a 1)
A
CL-USER> a
1
CL-USER> (let ((a 2)) (eval (eval 'a)))
2

Kpoxman ★★
()

Спасибо. Я использовал scm -r5

Legioner ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.