Насколько это правильное представление данной вложенной структуры [SICP]? Что я упускаю из виду?

#list #nested #scheme #sicp

#Список #вложенный #схема #sicp

Вопрос:

Второе предложение раздела 2.2.2 (Иерархические структуры) SICP: авторы говорят, что ((1 2) 3 4) (список из трех элементов) может быть создан с помощью (cons (list 1 2) (list 3 4)) .

Я думаю (ошибочно, конечно), что вместо этого он построит ((1 2) (3 4)) (два элемента), потому что:

  1. 3 и 4 будет заключен во вложенный, list не на верхнем уровне cons , и
  2. 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))