
Запись
'С
равносильна записи (QUOTE С). Функция QUOTE не оценивает свой
аргумент и возвращает его в качестве значения Таким образом, результатом оценки
выражения
'С
является символьный атом С.
Оценив оба аргумента функции (SET В
'С),
мы можем выполнить присваивание и
вычислить значение этой функции В результате присваивания символьный атом В
приобретет значение С Значением всей функции SET является оценка ее второго
аргумента, т е символьный атом С
По аналогии с
'С,
оценкой второго аргумента внешней функции SET -
'Z
-
является символьный атом Z В результате работы этой функции символьный атом С
(оценка первого аргумента) примет значение Z, и значением самой функции SET также
будет символьный атом Z
Рассмотрим оценку второго
s-выражения
(SETQ (SET
'А
В)
'С)
Это список.
Символьный атом SETQ задает имя функции Отличительной особенностью этой
функции является то, что она не оценивает свой первый аргумент, поэтому оставим
пока
s-выражение
(SET
'А
В) без внимания и перейдем к оценке второго аргумента.
Здесь мы видим функцию QUOTE, значением которой в данном случае является
символьный атом С
Теперь можно перейти к выполнению присваивания. Однако на этом этапе
обнаруживается, что первый аргумент функции SETQ не является символьным атомом,
поэтому выдается сообщение о невозможности выполнения присваивания списку.
Итак, правильный
ответ'
После оценки первого выражения
В=С,
C=Z
При оценке второго - сообщение об
ошибке "невозможно присвоить значение списку".
Заметим, что
1) никакие действия "внутри" неоцениваемого аргумента не выполняются,
соответственно, значения никаких символьных атомов не могут быть
изменены, и никакие сообщения об ошибках не будут выданы, даже если
выражение; соответствующее первому аргументу, записано некорректно;
2) оценивание второго аргумента функции SETQ происходит до попытки
присваивания, так что, даже если присваивание окажется невозможным (как в
нашем случае), никакие действия, выполненные при оценке второго
аргумента, например, присваивания, не будут отменены.
18