Эти процедуры позволяют создавать пары, читать элементы списков и векторов, а также менять содержимое вектора. В таблицах указаны нужные аргументы, возвращаемые значения и ошибки.
Прочитайте элемент
Вставьте каждый пример в песочницу и запустите его.
(list (list-ref (list 10 20 30) 1) (vector-ref #(4 5) 0))Результат
(20 4)Индексы начинаются с нуля. list-ref читает второй элемент списка, 20. vector-ref читает первый элемент вектора, 4.
Пары, векторы, строки и байтовые векторы называют составными значениями, потому что они хранят другие значения, знаки или байты.
Измените вектор
(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) | элемент с индексом k | E312, если список неправильный или k не является точным целым; E311, если индекс вне диапазона |
(vector-ref vector k) | элемент с индексом k | E312 при неверном типе; E311 при индексе вне диапазона |
(vector-set! vector k value) | ноль значений; меняет существующий вектор | E312 при неверном типе или неизменяемом векторе; E311 при индексе вне диапазона |
(bytevector-u8-ref bytevector k) | точное целое от 0 до 255 | E312 при неверном типе; 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 |
Виды значений описаны в разделе Данные и составные значения, а сравнения — в разделе Сравнение значений. Остальные семейства процедур приведены в указателе процедур.