Песочница

Данные и составные типы

Текущее пространство значений включает булевы значения, точные и неточные числа, знаки, символы-идентификаторы, строки, пустой список, пары, векторы, байт-векторы, процедуры и продолжения для выхода.

Когда это нужно

Выбирайте наименьшую форму, которая выражает задачу: атом для одного факта, правильный список для последовательности, вектор для изменяемых индексных ячеек, байтовый вектор для ограниченных байтов.

Проверьте запуском

LISPEX
(list (vector? #(1 2)) (bytevector? #u8(1 2)) (pair? (cons 1 2)))

Наблюдаемый результат

OUTPUT
(#t #t #t)

Разбор примера

Пример применяет три предиката к трём разным составным значениям. Каждый конструктор создаёт ожидаемый вид, поэтому получается список из трёх истинных значений.

Как рассуждать

  • В текущем профиле пары, строки и байтовые векторы неизменяемы; векторы и лексические ячейки изменяемы.
  • Цитированные составные данные неизменяемы; конструкторы создают объекты выполнения с документированными правилами идентичности.
  • Неправильные и циклические структуры отличны от правильных списков; глубокое равенство завершается на циклах.

Быстрый выбор

СемействоТипичная записьИзменяемость в текущем профиле
атомы#t, 42, 2/3, name, #\\aне применимо
список / пара(list 1 2), (cons 1 2)неизменяемы
строка"hello"неизменяема
вектор#(1 2) или (vector 1 2)ячейки изменяемы
байтовый вектор#u8(1 2)неизменяем
процедура(lambda (x) x)вызываемое значение; тело не является данными

Частая ошибка

Комплексные числа, порты, записи и изменяемые пары или строки вне текущего профиля.

Текущие границы

  • Внутренние исходы, сигналы и маркеры неинициализированности не являются гостевыми значениями.

Куда дальше

Конструкторы и доступ находятся в справочнике списков и агрегатов, а различие идентичности и структуры — в главе о равенстве.

Списки и агрегаты · Равенство