Лисп/Типы данных

Материал из Викиучебника

Перейти к: навигация, поиск

Действующие диалекты Лиспа способны работать со всеми «обычными» типами данных — от целых чисел до ассоциативных массивов, — на уровне любого передового высокоуровнего языка. При этом трансляторы выдают код, по производительности порой не уступающий тому же для Си. Однако, в Лиспе нет и не будет указателей.

Сначала же Лисп оперировал только символами и списками (отсюда и название — List processor).

Символ — это имя, состоящее из букв, цифр и[ли] некоторых специальных знаков. Символ обозначает произвольный объект или явление из прикладной области, вспомогательные объекты внутри программы, или некоторую структуру исходного кода. Имя функции — это тоже символ. Символ всегда имеет значение.

(setq x "value-of-x") => "value-of-x" ; присвоение символу значения
>> (symbol-value 'x) => value-of-x ; вывод значения символа

Особо выделяются логические символы t и nil: t — это «истина», «true».

>> (symbol-value t) => t

А nil, по крайней мере в Common Lisp’е — это «ложь»/«false», null, либо () — пустой список.

О подобной многозначности символа nil будет подробно сказано позже, когда будут обсуждаться списки, логические операции, функции…

Символы t и nil суть встроенные константы и не могут быть переопределены (действительно - зачем?). Константа - символ, имеющий постоянное значение. Константа определяется (переопределяется) с помощью директивы defconstant.

Вы всегда можете проверить, является ли некий объект символом (предикат symbolp) и узнать его имя (функция symbol-name) или значение (symbol-value). Вы уже могли догадаться об этом, если видели чуть выше маленький клочок кода :-) Более общим понятием является атом. атомы ≡ символы ⋃ числа.

Список - структура, состоящая из элементов, которыми могут быть атомы или другие списки.

(t (t nil t) t),
(1 (2 (3 4) 5))

— это списки. Список может не содержать элементов вовсе, такой список называется пустым и обозначается () или nil.

Список - это фундамент лиспа, ибо в зависимости от интерпретации список может представлять как данные, так и лисповый код. (symbol-value t) - тоже список.

Помимо вышеперечисленного, в лиспе есть еще тонна различных типов данных. Но у тебя, уважаемый читатель, уже есть достаточно знаний, чтобы перейти к изучению функций, что и советую сделать, прежде чем переходить к знакомству с другими типами данных. А у меня пока будет время, чтобы дописать этот раздел :-)