Учебники

LISP — переменные

В LISP каждая переменная представлена символом . Имя переменной — это имя символа, и оно хранится в ячейке памяти символа.

Глобальные переменные

Глобальные переменные имеют постоянные значения во всей системе LISP и действуют до тех пор, пока не будет указано новое значение.

Глобальные переменные обычно объявляются с использованием конструкции defvar .

Например

Live Demo

(defvar x 234)
(write x)

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет ее немедленно, и возвращаемый результат

234

Поскольку в LISP отсутствует объявление типа для переменных, вы непосредственно указываете значение для символа с помощью конструкции setq .

Например

->(setq x 10)

Вышеприведенное выражение присваивает значение 10 переменной x. Вы можете ссылаться на переменную, используя сам символ в качестве выражения.

Функция символ-значение позволяет извлечь значение, хранящееся в месте хранения символа.

Например

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

Live Demo

(setq x 10)
(setq y 20)
(format t "x = ~2d y = ~2d ~%" x y)

(setq x 100)
(setq y 200)
(format t "x = ~2d y = ~2d" x y)

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат.

x = 10 y = 20 
x = 100 y = 200

Локальные переменные

Локальные переменные определяются в рамках данной процедуры. Параметры, названные в качестве аргументов в определении функции, также являются локальными переменными. Локальные переменные доступны только внутри соответствующей функции.

Как и глобальные переменные, локальные переменные также могут быть созданы с помощью конструкции setq .

Есть две другие конструкции — let и prog для создания локальных переменных.

Конструкция let имеет следующий синтаксис.

(let ((var1  val1) (var2  val2).. (varn  valn))<s-expressions>)

Где var1, var2, ..varn — имена переменных, а val1, val2, .. valn — начальные значения, присвоенные соответствующим переменным.

Когда выполняется let , каждой переменной присваивается соответствующее значение и, наконец, вычисляется s-выражение . Возвращается значение последнего оцененного выражения.

Если вы не включили начальное значение для переменной, оно присваивается nil.

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

Live Demo

(let ((x 'a) (y 'b)(z 'c))
(format t "x = ~a y = ~a z = ~a" x y z))

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат.

x = A y = B z = C

Конструкция prog также имеет список локальных переменных в качестве первого аргумента, за которым следует тело prog и любое количество s-выражений.

Функция prog выполняет список s-выражений в последовательности и возвращает nil, если не встречает вызов функции с именем return. Затем аргумент функции возврата оценивается и возвращается.

пример

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

Live Demo

(prog ((x '(a b c))(y '(1 2 3))(z '(p q 10)))
(format t "x = ~a y = ~a z = ~a" x y z))

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат.