Цитирование списка или символа в Лиспе с помощью '
в точности эквивалентно использованию специальной формы (quote ...)
.Это специально для того, чтобы сделать оценку процитированной вещи , а не .'data
в коде на Лиспе или введенный в REPL - то же самое, что и (quote data)
, и оценивается как символ data
.
data
без кавычки - в значение переменная data
в текущей области видимости.Таким образом, в REPL:
[1]> (setq data 14)
14
[2]> data
14
Первое выражение также оценивается как 14
, потому что setq
возвращает значение связанной переменной (в этом отношении действует как оператор присваивания =
в C).
То, что вы сделали в приведенном выше коде, - это установите переменную с именем temp
, содержащую символ data
, а затем, используя set
(без setq
), установитепеременная с именем data
символу show
.Это немного похоже на использование мягких ссылок в Perl (например), но я не думаю, что оно особенно широко используется или рекомендуется в качестве техники Lisp.
Кстати, ваша display
процедура, вероятно, вероятноне делать то, что вы думаете: он возвращает список из одного элемента того, что вы передаете ему.Тот факт, что значение печатается при вводе его в REPL, объясняется тем, что значение любое выражение печатается в REPL.Для отображения значения в программе вы можете использовать print
или, возможно, формат .(Я предполагаю, что вы используете Common Lisp, поскольку он, очевидно, не Scheme, но, возможно, это какой-то другой вариант Lisp, и в этом случае эта ссылка не поможет.)