2010-12-10 3 views
3

В настоящее время я работаю над разделом SICP по логическому программированию, но я застрял в примерах относительно логических вычетов, особенно правил добавления в форму. Как они работают? Я не совсем понимаю, как второе правило cdr-down первый список. Например, учитывая:Как работает append-to-form? (Раздел SICP по логическому программированию)

(правило (добавление к форме() у у)?)

(правило (добавление к форме (и у) у (и?.???. ? г)) (присоединять к форме V у г))

а) Как мы достигаем из:?

;;; 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)) 

я был бы заинтересован в конкретных умственных действий, необходимых для выполнения согласования правил.

Заранее спасибо.

ответ

3

Слушайте переводчика, беря лист бумаги и записывая каждый шаг. На каждом шаге вы записываете, какое правило было/могло быть запущено, и какая переменная была привязана к какому значению.

Например:

(append-to-form (a b) (c d) ?z) 

запускает правило

(rule (append-to-form (?u . ?v) ?y (?u . ?z)) 
    (append-to-form ?v ?y ?z)) 

с

?u = a, ?v = (b), ?y = (c d), ?z = (a . ?z_2) 

Примечания: г в исходном запросе должен быть другими переменной от г? в теле правила, чтобы переименовать правило? z в? z_2. Список (1 2 3) при сопоставлении с (? A.? B) создает? A = 1,? B = (2 3), например, когда car/cdr'ing список.

Эти привязки применяются к телу правила (append-to-form ?v ?y ?z) Таким образом мы получаем

(append-to-form (b) (c d) ?z_2) 

, который снова становится

(append-to-form() (c d) ?z_3) 

и вызывает другое правило: (rule (append-to-form() ?y ?y)) связывание Z_3 с (с г)?. Тогда рекурсии ногами в? Z_2 была определена как (б.? Z_3),? Г была определена как (а.? Z2)

Исходный запрос (append-to-form (a b) (c d) ?z) применяется ко привязок, в котором? Г = (а. (б (кд).)) и возвращает (append-to-form (a b) (c d) (a b c d))

остальные упражнения читателю;)

решающие понятия здесь сопоставление с образцом и объединения, которые можно найти на section 4.2.2. Весь оценщик запросов - это действительно самая сложная часть в SICP, поэтому не будьте обескураживающими. Это стоит усилий. Попробуйте запустить код (в R5RS Scheme) и поиграть с ним, например, добавить трассировку.

+0

Благодарим за отзыв, говядина. Фактически, я боролся с этим, потому что функционирование оценщика объясняется далее в этой главе. Я должен был предварительно прочитать раздел, следующий за этими примерами. – motxilo 2011-01-05 14:47:28

 Смежные вопросы

  • Нет связанных вопросов^_^