В настоящее время я работаю над разделом SICP по логическому программированию, но я застрял в примерах, касающихся логических выводов, особенно правил добавления в форму. Как они работают? Чего я не совсем понимаю, так это того, как второе правило cdr уменьшает первый список. Например, учитывая:
(правило (дополнение к форме () ?y ?y))
(правило (присоединение к форме (?u . ?v) ?y (?u . ?z)) (присоединение к форме ?v ?y ?z))
а) Как мы достигаем от:
;;; Query input:
(append-to-form (a b) (c d) ?z)
to
;;; Query results:
(append-to-form (a b) (c d) (a b c d))
б) А что насчет этого:
;;; Query input:
(append-to-form (a b) ?y (a b c d))
to
;;; Query results:
(append-to-form (a b) (c d) (a b c d))
в) И последнее:
;;; Query input:
(append-to-form ?x ?y (a b c d))
to
;;; Query results:
(append-to-form () (a b c d) (a b c d))
(append-to-form (a) (b c d) (a b c d))
(append-to-form (a b) (c d) (a b c d))
(append-to-form (a b c) (d) (a b c d))
(append-to-form (a b c d) () (a b c d))
Я был бы заинтересован в конкретных умственных шагах, необходимых для выполнения сопоставления правил.
Заранее спасибо.