Ассоциативные списки (Alists)
список ассоциаций (или список) — это фундаментальная структура данных в Scheme, используемая для представления коллекций пар ключ-значение. Он реализован в виде списка пар, где каждая пара связывает ключ (обычно символ) со значением. Списки просты, гибки и хорошо подходят для наборов данных небольшого и среднего размера.
Структура списка ассоциаций
Список — это список, в котором каждый элемент представляет собой пару (созданную с помощью cons). Каждая пара состоит из:
- Ключ: первый элемент (обычно символ).
- Значение: второй элемент, который может иметь любой тип данных.
(define alist '((name . "Alice") (age . 30) (city . "Paris")))- Ключ:
'name,'age,'city - Значение:
"Alice",30,"Paris" - Структура: список пар:
((name . "Alice") (age . 30) (city . "Paris"))
Создание списка
Вы можете создать список, создав пары вручную или программно, используя cons.
Использование одинарной кавычки (')
Одинарная кавычка (') является сокращением цитирования, что не позволяет Scheme оценить выражение. Это делает его идеальным для создания статических списков, в которых все ключи и значения жестко запрограммированы.
;; Ручное определение alist
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
;; Программное добавление новой пары
(define updated-alist (cons '(country . "France") alist))Результат:
((country . "France") (name . "Alice") (age . 30) (city . "Paris"))
Использование обратной кавычки (`) и запятая (,)
Оператор обратной кавычки (`) похож на одинарную кавычку, но позволяет динамически вставлять вычисленные выражения с помощью запятой (,). Это полезно для создания списков, в которых ключи или значения вычисляются во время выполнения.
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))Результат:
((name . "Alice") (age . 30) (city . "Paris"))
Пример сравнения
Статический список с использованием ':
(define alist '((name . "Alice") (age . 30) (city . "Paris")))Динамический список с использованием ` и ,:
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))Доступ к данным в списке
Чтобы получить значение из списка, вы можете использовать функцию assoc, которая ищет пару по ее ключу.
(assoc 'name alist) ; Возвращает (name . "Alice")
(assoc 'country alist) ; Возвращает #f (ключ не найден)Извлечение значения
После того как вы получите пару с помощью assoc, используйте cdr, чтобы извлечь значение:
(cdr (assoc 'name alist)) ; Возвращает "Alice"Краткое описание основных функций
- Одиночная кавычка (
'): создает статический список, в котором все элементы являются буквальными данными. - Обратная кавычка (
`): Позволяет динамически создавать alist, смешивая статические элементы с вычисленными выражениями (с помощью,). - Точечная нотация (
.): используется для создания пар, связывающих ключ со значением в списке.