Лисп/Типы данных: различия между версиями

Содержимое удалено Содержимое добавлено
Новая: {{wikipedia}} __NOTOC__ __NOEDITSECTION__ <div style="max-width:60em;margin:1em auto 0 4%;"> Итак, типы данных в лиспе. Знакомство с типами дан...
(нет различий)

Версия от 20:41, 14 сентября 2008


Итак, типы данных в лиспе.

Знакомство с типами данных — это старт в изучении языка.

Лисп был создан как специфический язык для работы со списочными структурами и оперировал только списками и символами (отсюда и название — LISt Processor). Но время не стоит на месте, и лисп середины XX века и лисп XXI века — совершенно разные языки. Современные трансляторы языка способны работать с разнообразными типами данных, при этом они генерируют высокопроизводительный код, не уступающий тому же Си.

И все же основными типами данных в лиспе остаются символы и списки.

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

>> (setq x "value-of-x") => "value-of-x" ; присвоение символу значения
>> (symbol-value x) => value-of-x ; вывод значения символа
Особо выделяются логические символы t и nil, значение которых ...
>> (symbol-value t) => t

t = true, nil = (or 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) - тоже список.

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