Списки ассоциаций (Алисты)
список ассоциаций (или список) — это фундаментальная структура данных в Scheme, используемая для представления коллекций пар ключ-значение. Он реализован в виде списка пар, где каждая пара связывает ключ (обычно символ) со значением. Списки просты, гибки и хорошо подходят для наборов данных небольшого и среднего размера.
Структура списка ассоциаций
Список — это список, в котором каждый элемент представляет собой пару (созданную с помощью cons). Каждая пара состоит из:
- Ключ: первый элемент (обычно символ).
- Значение: второй элемент, который может иметь любой тип данных.
(define alist '((name . "Alice") (age . 30) (city . "Paris")))- Ключ:
'name,'age,'city - Значение:
"Alice",30,"Paris" - Структура: список пар:
((name . "Alice") (age . 30) (city . "Paris"))
Создание списка
Вы можете создать список, создав пары вручную или программно, используя cons.
Использование одинарной кавычки (')
Одинарная кавычка (') является сокращением цитирования, что не позволяет Scheme оценить выражение. Это делает его идеальным для создания статических списков, в которых все ключи и значения жестко запрограммированы.
;; Manually define an alist
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
;; Programmatically add a new pair
(define updated-alist (cons '(country . "France") alist))Результат:
((country . "France") (name . "Alice") (age . 30) (city . "Paris"))
Использование обратной кавычки (`) and Comma (,)
Оператор обратной кавычки (`) is similar to the single quote but allows you to dynamically insert evaluated expressions using the comma (,). Это полезно для создания списков, в которых ключи или значения вычисляются во время выполнения.
(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")))Динамический список с использованием ` and ,:
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))Доступ к данным в списке
Чтобы получить значение из списка, вы можете использовать функцию assoc, которая ищет пару по ее ключу.
(assoc 'name alist) ; Returns (name . "Alice")
(assoc 'country alist) ; Returns #f (key not found)Извлечение значения
После того как вы получите пару с помощью assoc, используйте cdr, чтобы извлечь значение:
(cdr (assoc 'name alist)) ; Returns "Alice"Краткое описание основных функций
- Одиночная кавычка (
'): создает статический список, в котором все элементы являются буквальными данными. - Обратная кавычка (
`): Allows dynamic creation of alists by mixing static elements with evaluated expressions (using,). - Точечная нотация (
.): используется для создания пар, связывающих ключ со значением в списке.