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)