Типы данных: Формы мысли

Числа, строки, списки, булевы значения... это не просто данные, а различные сосуды для хранения мысли. Узнайте, какие формы принимают данные в Lispex и как эти формы моделируют мир.

Эта страница знакомит с данными на входной S‑поверхности Lispex v1. Семантика выполнения и библиотеки вне объёма. Примеры можно сразу пробовать в LENA code: www.lenacode.com

Примитивные типы

Базовые значения, встречающиеся в Lispex.

Числа (Numbers)

Вводные формы: целые/рациональные/вещественные.

30
19.99
-100
42/7

Логические значения (Booleans)

Истина/ложь — #t и #f.

#t
#f
(and #t #t)       ; ⇒ #t
(or #f #t)        ; ⇒ #t
(not #t)          ; ⇒ #f
(if #t "yes" "no")

Символы‑литеры (Characters)

Односимвольные значения.

#\a
#\space
#\x03B1          ; греческая альфа

Строки (Strings)

Представляют последовательности символов, заключенные в двойные кавычки.

"Lispex Language"
"Hello, Lispex! 👋"
""
"quote: \" \n tab: \t hex: \x41;" ; экранирование

Идентификаторы (Symbols)

Имена как данные (зарезервированные слова связывать нельзя).

'apple
'Σ
'util.string

Типы коллекций (Collection Types)

Списки (Lists)

Упорядоченные коллекции элементов. Создаются через (list ...). Пустой список — (). Точечные списки (dotted lists) как ввод тоже разрешены.

(list)
(list 1 2 3 4 5)
(list "hello" "world" "lispex")
(list 1 (list 2 3) 4)
(1 2 3 . 4)       ; точечный список (вводная форма)

Распространённые операции находятся в стандартной библиотеке (first/rest/length, append, map/filter и т. п.).

Векторы (Vectors)

#(1 2 3)
#("a" "b" "c")

Байтовые векторы (Bytevectors)

Массивы байтов (целые 0–255).

#u8(72 101 108 108 111)

В режиме R5RS‑compat запись #u8(...) может автоматически заменяться обычным вектором (с предупреждением). См. заметки ниже.

Семейство quote (сокращения ридера)

Удобные формы для построения данных.

'x                ; ⇒ (quote x)
`(a ,x ,@ys b)    ; ⇒ (append (list 'a x) ys (list 'b))

Функции (Functions)

Функции — объекты первого класса. Определяются анонимно через lambda или с именем через синтаксический сахар define.

(define (add a b) (+ a b))
(add 10 20)
(lambda (n) (+ n 1))  ; анонимная функция

Заметки по R5RS‑compat

Включите переключатель вверху файла:

;! compat: r5rs
  • Байтовые векторы #u8(...) могут быть заменены обычными векторами.
  • Совпадение в case описано через equal?, но в R5RS‑реализаторах используется eqv?.
  • Поверхностный заголовок модуля (module ...) отбрасывается/«сплющивается» на верхний уровень.