#list #nested #scheme #sicp
#Список #вложенный #схема #sicp
Вопрос:
Второе предложение раздела 2.2.2 (Иерархические структуры) SICP: авторы говорят, что ((1 2) 3 4)
(список из трех элементов) может быть создан с помощью (cons (list 1 2) (list 3 4))
.
Я думаю (ошибочно, конечно), что вместо этого он построит ((1 2) (3 4))
(два элемента), потому что:
3
и4
будет заключен во вложенный,list
не на верхнем уровнеcons
, иcons
создает пару элементов, а пара означает 2 элемента, а не 3.
Чего я здесь не понимаю?
Ответ №1:
Список — это цепочка пар, заканчивающаяся парой, cdr
которой является пустым списком.
(list 3 4)
две пары, эквивалентные
(cons 3 (cons 4 '()))
Итак (cons (list 1 2) (list 3 4))
, 3 пары эквивалентны
(cons (list 1 2) (cons 3 (cons 4 '())))
В общем, если у вас есть список old-list
, вы можете создать новый список с новым элементом спереди с помощью:
(cons new-element old-list)
Вы получили бы то, что ожидали, если бы написали
(list (list 1 2) (list 3 4))