[Scheme ]

Создание переменных

Для того чтобы создать новую переменную, которая будет содержать некоторые данные можно использовать макрос "define", с его помощью создаются глобальные переменные. Такие переменные видны из любого места программы, независимо где они были объявленны.

(define x 12)
x
->12

Макросы let, let*, letrec создают местные переменные, видимые только внутри соответствующих зон видимости.

(define x 13)
(display x)
(newline)
(let ((x 20)) (display x)(newline))
(display x)
->13
->20
->13

Как мы видем, тосле того как исполнение программы вышло за пределы блока "let" программа снова стала выводить изначальное значение переменной "x" -- 13. Дело не в том, что значение хранимое в переменной х изменилось, а затем снова вернулось к первоначальному, а в том, что "let" сооздала новую переменную со значением 20, которая как бы перекрыла изначальную переменную, а когда испольнения блока "let" завершилось, эта переменная была автоматически удаленна.

(begin (define x2 12345))
(display x2)
(newline)
(begin (let ((x3 987654321))(display x3))(newline))
(display x3)

А при исполнении этого примера вы получите сообщение об ошибке, говорящее, что переменной x3 не существует, так как эта переменная перестала существовать после завершения исполнения блока, в котором она была объявленна.