Кадр 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   ))

потерпит неудачу.

Двойные скобки вообще не имеют особого значения.

Другие вопросы по тегам