Лисп/Типы данных: различия между версиями
Содержимое удалено Содержимое добавлено
Новая: {{wikipedia}} __NOTOC__ __NOEDITSECTION__ <div style="max-width:60em;margin:1em auto 0 4%;"> Итак, типы данных в лиспе. Знакомство с типами дан... |
Ramir (обсуждение | вклад) мНет описания правки |
||
Строка 1:
<div style="max-width:60em;margin:1em auto 0 4%;">
Действующие диалекты Лиспа способны работать со всеми «обычными» типами данных — от целых чисел до ассоциативных массивов, — на уровне любого передового высокоуровнего языка. При этом трансляторы выдают код, по производительности порой не уступающий тому же для Си. Однако, в Лиспе нет и не будет указателей.
Сначала же Лисп оперировал только символами и списками (отсюда и название — <u>Lis</u>p <u>p</u>rocessor).
'''Символ — это имя''', состоящее из букв, цифр и[ли] некоторых специальных знаков. Символ обозначает
>> (symbol-value x) => value-of-x ; вывод значения символа▼
Особо выделяются логические символы <var>t</var> и <var>nil</var>: t — это «истина», «true».
>> (symbol-value t) => t
А nil, по крайней мере в Common Lisp’е — это «ложь»/«false», <var>null</var>, либо <code>()</code> — пустой список.
О подобной многозначности символа <var>nil</var> будет подробно сказано позже, когда будут обсуждаться списки, логические операции,
▲'''Символ — это имя''', состоящее из букв, цифр и некоторых специальных знаков. Символ обозначает некий объект или явление из реального мира (да и виртуального тоже). Имя функции — это тоже символ. У символа есть значение.
▲>> (setq x "value-of-x") => "value-of-x" ; присвоение символу значения
▲>> (symbol-value x) => value-of-x ; вывод значения символа
Символы t и nil
▲О подобной многозначности символа nil будет подробно сказано позже, когда будут обсуждаться списки, логические операции, функции ...
▲t и nil являются константами и не могут быть переопределены (действительно - зачем?). Константа - символ, имеющий постоянное значение. Константа определяется (переопределяется) с помощью директивы defconstant.
Вы всегда можете проверить, является ли некий объект символом (предикат symbolp) и узнать его имя (функция symbol-name) или значение (symbol-value). Вы уже могли догадаться об этом, если видели чуть выше маленький клочок кода :-)
Более общим понятием является '''атом'''
'''Список''' - структура, состоящая из элементов, которыми могут быть атомы или другие списки.
(t (t nil t) t),
(1 (2 (3 4) 5))
Список - это фундамент лиспа, ибо в зависимости от интерпретации список может представлять как данные, так и лисповый код. (symbol-value t) - тоже список.
|