Урок 2. Типы данных в LISP

LISP   9 декабря 2012  Автор статьи:  

В языке программирования lisp существует только два типа переменных: атомы и списки. Атомы — неделимые объекты, все остальные объекты представлены в виде списков. Таким образом списки являются универсальным объектом, который может хранить в себе как код, так и значения, следовательно может объединять в себе множество элементов различной сложности. Вы наверное ожидали от меня рассказ про целочисленные и строковые типы данных, а не про какие — то непонятные атомы и списки, но в языке lisp объект, а не переменная имеет привычный нам тип данных. Конечно можно ввести некоторые ограничения на переменную, но их можно обойти. Объект в lisp может принадлежать нескольким типам данных, поэтому очень интересно узнать, а принадлежит ли данный объект этому типу данных. Если объект принадлежит всем типам данных, то он обозначается как T(true), если не принадлежит ни к одному, то NIL(false). Существует также тип common, который представляет из себя множество типов, которые обязательны для любой реализации lisp. Для того, чтобы проверить относится ли данный тип данных к common используют предикат commonp. Теперь рассмотрим базовые типы данных:

  • Числа — обычные числа целые и вещественные, переходят друг в друга при понятных условиях, также возможна работа и с комплексными числами
  • Буквы — обычные печатные символы текста
  • Символы — отличие символов от букв в области применения, используются для именования функций и переменных.
  • Списки — некоторая последовательность данных, пустой список эквивалентен NIL.
  • Массивы — набор однотипных данных, к которым можно обращаться по индексу. Lisp поддерживает любое положительное количество измерений и любую целочисленную индексацию.
  • Хэш-таблицы — множество пар ключ — значение, к которым возможен доступ через ключ
  • Таблицы чтения — служат для модификации работы анализаторов lisp.
  • Пакеты — как и в любом другом языке программированию служат для разграничения пространства имен, иными словами служат для устранения конфликтов с именованием переменных
  • Путевые имена — имена файлов
  • Потоки — некоторые интерфейсы для доступа(чтения) или вывода(записи) информации
  • Случайные ячейки — ячейки, которые использует генератор случайных чисел
  • Структуры — пользовательский тип данных, который представляет из себя некоторый набор базовых типов
  • Функции — некоторый набор команд(функций), который возвращает значение
  • Сигналы — специальный тип данных, который используют для управлением ходом исполнения программы
  • Классы — сложный объект в lisp, который задает поведение для своих экземпляров.
  • Методы — функции без аргументов, которые находятся в классе.
  • Обобщенные функции — функция, которая в своей реализации содержит некоторый набор функций

Вернемся к нашим баранам. К атомам в языке lisp относят цифры и символы. Напишем проверку этого факта:

(defun isatomp(atom)
(or (numberp atom) (symbolp atom))
)

Теперь проверим нашу функцию:

(isatomp 1)
T
(isatomp 'symbol)
T

Наша функция работает вполне предсказуемо, давайте рассмотрим типы данных более подробно, для этого перейдем на следующий урок

Научиться программировать

  • на Delphi

  • на Java

  • на C++