Добавление элемента в голову списка (ассоциативный список) достаточно прост:
> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))
Добавление в хвост алист-это немного сложнее. После некоторых экспериментов, я произвел этот:
> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))
Однако, мне кажется, что это'т идиоматические решение. Так как это обычно делается в схеме? Или это на самом деле так?
Общий Лисп определяет функцию под названием ACONS для этой цели, где
(acons key value alist)
эквивалентно:
(cons (cons key value) alist)
Это сильно предполагает, что просто используя на алист идиоматических. Обратите внимание, что это означает две вещи:
Вы Don'т добавить к списку. Вы на минусы из списка.
Из списка логически набор ассоциаций. Вы Don'т волнует порядок элементов в наборе. Все что тебя волнует-это наличие или отсутствие того или иного элемента. В случае списка, все вы заботитесь о том, существует ли связь для определенного тега (т. е. пара, чей автомобиль является указанным значением), и, учитывая, что ассоциации, связанные с значение (т. е., в данной реализации, ЦХД пары).