LINUX.ORG.RU

scheme: keywords и имена переменных


0

0

В mzscheme макросы не работают, если keyword совпадает 
с именем переменной. 

Например:

(define-syntax S
   (syntax-rules (w)
         ((S w) 1) ))

Вот такое выражение не вычисляется:
(let ((w 2)) (S w))

Это баг или фича?
★★

Выражения вычисляются параллельно, поэтому во второй ветке про w ещё ничего не известно. Как уже подсказали, нужен let*

mv ★★★★★
()
Ответ на: комментарий от anonymous

Почему?

То с let эквивалентно:

((lambda (w) (S w)) 1)

(S w) используется в контексте, где w является связной переменной, с другой стороны, сначала должны разворачиваться макросы, а потом интепретироваться переменные.

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