LISP - Типы данных

В LISP типизируются не переменные, а объекты данных.

Типы данных LISP можно разделить на категории.

  • Scalar types - например, типы чисел, буквы, символы и т. Д.

  • Data structures - например, списки, векторы, битовые векторы и строки.

Любая переменная может принимать в качестве значения любой объект LISP, если вы не заявили это явно.

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

Типы данных организованы в иерархию. Тип данных - это набор объектов LISP, и многие объекты могут принадлежать одному такому набору.

В typep предикат используется для определения принадлежности объекта к определенному типу.

В type-of функция возвращает тип данных заданного объекта.

Спецификаторы типов в LISP

Спецификаторы типа - это системные символы для типов данных.

массив fixnum пакет простая строка
атом плавать путь простой вектор
bignum функция случайное состояние однопоплавковый
немного хеш-таблица соотношение стандартный символ
бит-вектор целое число рациональный поток
персонаж ключевое слово читаемый строка
[обычный] список последовательность [строка-символ]
скомпилированная функция длинный плавающий короткое плавание условное обозначение
сложный ниль подписанный байт т
минусы ноль простой массив беззнаковый байт
двойной поплавок количество простой битовый вектор вектор

Помимо этих типов, определенных системой, вы можете создавать свои собственные типы данных. Когда тип структуры определяется с помощьюdefstruct функции, имя типа структуры становится допустимым символом типа.

Пример 1

Создайте новый файл исходного кода с именем main.lisp и введите в него следующий код.

(setq x 10)
(setq y 34.567)
(setq ch nil)
(setq n 123.78)
(setq bg 11.0e+4)
(setq r 124/2)

(print x)
(print y)
(print n)
(print ch)
(print bg)
(print r)

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат -

10 
34.567 
123.78 
NIL 
110000.0 
62

Пример 2

Теперь давайте проверим типы переменных, использованных в предыдущем примере. Создайте новый файл исходного кода с именем main. lisp и введите в него следующий код.

(defvar x 10)
(defvar y 34.567)
(defvar ch nil)
(defvar n 123.78)
(defvar bg 11.0e+4)
(defvar r 124/2)

(print (type-of x))
(print (type-of y))
(print (type-of n))
(print (type-of ch))
(print (type-of bg))
(print (type-of r))

Когда вы нажимаете кнопку «Выполнить» или нажимаете Ctrl + E, LISP выполняет его немедленно, и возвращается результат -

(INTEGER 0 281474976710655) 
SINGLE-FLOAT 
SINGLE-FLOAT 
NULL 
SINGLE-FLOAT 
(INTEGER 0 281474976710655)