Песочница

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

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

Эта страница знакомит с данными на входной S‑поверхности Lispex v1.1. Lispex выполняется напрямую в эталонном интерпретаторе — попробуйте Песочницу — а также транспилируется через Lena Code: www.lenacode.com/code/

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

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

Числа (Numbers)

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

LISPEX
30
19.99
-100
42/7

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

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

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

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

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

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

Строки (Strings)

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

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

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

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

LISPEX
'apple

'util.string

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

Списки (Lists)

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

LISPEX
(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)

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

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

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

LISPEX
#u8(72 101 108 108 111)

В режиме R5RS‑compat спецификация заменяет #u8(...) обычным вектором (спец‑код W310, не выдаётся в v1). См. заметки ниже.

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

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

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

Функции (Functions)

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

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

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

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

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