Кадр 1:33. Как нам объединить два списка?
Я не думаю, что где-то было написано, как это должно работать.
Мы получаем:
(run* q
(==
'( ((pea)) pod)
`( ((pea)) ,q)))
В форме квазикавычек он заключен в кавычки, поэтому остается символом, а не заключен в кавычки, поэтому относится к переменной вrun
. Затемq
по-видимому становитсяpod
.
Как эти два списка потом объединяются друг с другом? Какой механизм стоит за этим? Могу ли я просто наложить два списка друг на друга, а затем сказать, что элементы по индексу1
стать таким же?
Тоже до сих пор загадка почемуpea
имеет двойную скобку.
1 ответ
Цель объединения
(==
'( ((pea)) pod)
`( ((pea)) ,q))
такой же как
(==
(list (list (list 'pea)) 'pod)
(list (list (list 'pea)) q ))
так что да, это " работа через структуру списка", и никаких других структур - только списки. Это должно быть простым и достаточно простым для кодирования путем рекурсивного обхода двух списков в унисон, если структура одинакова, а подтермины могут быть унифицированы.
Таким образом, вышеуказанная цель достигается, расширяя замену аргумента с помощью пары переменной и ее значения, символа данных. Но и,
(==
(list (list p ) 'pod)
(list (list (list 'pea)) q ))
также преуспеет, расширив замену аргумента с помощью пары переменной символ'pod
а также сопряжение переменной с ее значением,(list 'pea)
-- при условии, чтоp
иq
действительно были определены как логические переменные,run*
или поfresh
. Тогда как
(==
(list (list "p" ) 'pod)
(list (list (list 'pea)) q ))
потерпит неудачу.
Двойные скобки вообще не имеют особого значения.