2012-04-14 3 views
0

Я пытаюсь напечатать все факты, используемые для получения запроса, и я надеюсь ничего не печатать, если унификация потерпит неудачу. Так что я пишу это:Как получить все факты, используемые для получения запроса в Prolog?

a:- 
    b,c,writeln(b^c->a). 
b:- 
    d,writeln(d->b). 
c:- 
    fail,writeln(e->c). 
d:- 
    writeln(d). 
a:- 
    b,d,writeln(b^d->a). 

Однако, когда я запрашиваю a., я получил следующий вывод печально:

d 
d->b 
d 
d->b 
d 
b^d->a 
true. 

Кто-то, кажется, сказать мне, что Пролог имеет встроенный machanism показать все факты, используемые для выполнения запроса. Это правда? Как я могу получить правильный результат?

ответ

1

Ваша программа не имеет переменных и, следовательно, не объединяет.

редактировать: Или лучше, в абстрактном смысле Пролог выбрать между списком Хорна унифицировать текущую цель с каждым правилом головы. Но фактические Прологи заменяют фазу выбора индексированием, производительностью и попыткой объединения по аргументам.

При вызове a, что вызывает bиc, ипечати выражения.

Встроенный механизм для отображения всех правил, используемых в запросе, вероятно, trace. Подробнее см. В руководстве Prolog, это довольно сложный аргумент, включающий внутреннюю работу системы и «архитектуру» языка, на который вы нацеливаетесь.

Существует, конечно, нет справа выход, отдельно то, что вы можете видеть. Это семантика, которую вы написали.

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

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