Похоже, что то, что вы хотите сделать, является своего рода «цепной цепью». Итак, вы хотите, чтобы иметь возможность добавить факт в базу знаний, а затем посмотреть дополнительные факты всплывают.
Такие вещи были очень модными в 80-е годы, когда появились экспертные системы , а также могут быть выполнены с помощью Prolog. Вот статья, описывающая примерно разницу между «обратной цепочки» и «вперед цепочки»:
Logic Программирование Associates Ltd.
ProWeb: Экспертная система
Я попытался переделать что-то похожее на вышеприведенном вперед цепочки через механизм расширения предложения, который доступен во многих системах Prolog и через повестку дня, которая хранится в базе знаний как обычный фактов. Механизм расширения изменяет правило следующего вида:
P :- A
В правило, где Х представляет собой свежий переменная не встречающиеся в Р или А:
delta(X, P) :- A_new(X)
Где A_new является условием, что говорит, что Р является новым, когда появился новый факт X. Давайте рассмотрим ваш пример:
?- ['delta.p'].
?- [user].
:- forward season/1.
:- forward cold/0.
:- forward warm/0.
cold :- season(winter).
warm :- season(summer).
^D
Этих два правила Пролога будет превращены в следующей дельте/2 правил через переписывание.Так как правила очень просты, дельта/2 правила также очень прост:
?- listing(delta/2).
delta(X, cold) :-
X = season(winter).
delta(X, warm) :-
X = season(summer).
Ниже приведен пример сеанса:
?- list.
Yes
?- volunteer(season(winter)).
Yes
?- list.
season(winter).
cold.
Yes
Перезапись в delta.p очень примитивные. Переписывание может быть усилено для поддержки жестких предикатов и для поддержки динамического удаления фактов. Возможные области дополнительного применения "прямой цепочки" тогда:
- Natural Language Processing
- Constraint Решение
С наилучшими пожеланиями
Текущий дельта/2 переписывания после нескольких летние разработки:
http://www.jekejeke.ch/idatab/doclet/blog/en/docs/15_min/02_reference/minimal/delta.html
статье, показывая, что ограничение магазин может быть смоделирован:
https://plus.google.com/+JekejekeCh/posts/8oHErwopKxK
P.S .: Имя предиката добровольца/1 стеблей образуют Nexpert Object,
экспертная система оболочки в использовании в 80-х и 90-х годов.
NEXPERT OBJECT версия 3.0, Жан-Мари Шове, Neuron Data, Inc.
PPS: Но вы можете для поиска более новые вещи, такие как Rete-NT, или OWL:
http://answers.semanticweb.com/questions/3304/forward-vs-backward-chaining
С помощью этого метода всякий раз, когда я запрашиваю холодный или теплый, я получаю ошибки – user1279812
Вы должны запросить начало (Y). –
@ пользователь1279812 это сработало? –