Песочница

Процедуры списков и составных значений

Создавайте пары, читайте элементы списков и векторов, изменяйте векторы и находите ошибки аргументов для каждой процедуры.

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

Прочитайте элемент

Вставьте каждый пример в песочницу и запустите его.

LISPEX
(list (list-ref (list 10 20 30) 1) (vector-ref #(4 5) 0))

Результат

ВЫВОД
(20 4)

Индексы начинаются с нуля. list-ref читает второй элемент списка, 20. vector-ref читает первый элемент вектора, 4.

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

Измените вектор

LISPEX
(define v (vector 4 5))
(define same v)
(vector-set! v 0 9)
(list (vector-ref same 0) (eq? v same))

Результат

ВЫВОД
(9 #t)

vector-set! заменяет первый элемент v. Изменение видно и через same, поскольку это ссылка на тот же вектор. Вектор сохраняет идентичность объекта, поэтому eq? возвращает #t.

vector-set! возвращает ноль значений. Чтобы показать изменение, пример затем читает содержимое вектора.

Создайте изменяемый вектор через vector или vector-copy. Литералы векторов, например #(4 5), и цитированные векторы неизменяемы. Попытка изменить их вызывает E312. Пары и байтовые векторы тоже неизменяемы в текущем профиле языка.

Вызовы и ошибки

В таблице k — точный целый индекс, начинающийся с нуля. Правильный список — это цепочка пар, заканчивающаяся пустым списком (), либо сам пустой список.

ВызовРезультатНеверные аргументы
(cons a d)новая пара со значениями a и dпринимает любые два значения
(car pair) / (cdr pair)сохранённая первая / вторая частьE310, если аргумент не является парой
(list-ref proper-list k)элемент с индексом kE312, если список неправильный или k не является точным целым; E311, если индекс вне диапазона
(vector-ref vector k)элемент с индексом kE312 при неверном типе; E311 при индексе вне диапазона
(vector-set! vector k value)ноль значений; меняет существующий векторE312 при неверном типе или неизменяемом векторе; E311 при индексе вне диапазона
(bytevector-u8-ref bytevector k)точное целое от 0 до 255E312 при неверном типе; E311 при индексе вне диапазона

Ошибка зависит от процедуры. Например, car сообщает E310 для значения, не являющегося парой, а list-ref сообщает E312 для неправильного списка.

Другие операции

ЗадачаПроцедуры
создать список или паруlist, make-list, cons
прочитать частиcar, cdr, их сочетания, например cadr, а также list-ref, list-tail
найти значениеmember, memv, memq, assoc, assv, assq
скопировать, соединить или развернуть спискиlist-copy, append, reverse
создать, скопировать или преобразовать векторvector, make-vector, vector-copy, vector-map

Виды значений описаны в разделе Данные и составные значения, а сравнения — в разделе Сравнение значений. Остальные семейства процедур приведены в указателе процедур.