|
|
— |
pl:prolog:pllib:forward-chaining_rule_interpreter [2019/06/27 15:50] (aktualna) |
| ====== Forward-chaining rule interpreter ====== |
| {{tag>forward-chaining rules interpreter}} |
| ===== Description ===== |
| A forward chaining rule interpreter. |
| |
| **Source**: PROLOG programming for artificial intelligence, 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7. |
| ===== Download ===== |
| Program source code: {{forward-chaining_rule_interpreter.pl}} |
| ===== Listing ===== |
| <code prolog> |
| % Figure 15.7 A forward chaining rule interpreter. |
| |
| :- op( 900, fy, not). |
| |
| % not Goal): negation as failure; |
| % Note: This is often available as a built-in predicate, |
| % often written as prefix operator "\+", e.g. \+ likes(mary,snakes) |
| |
| not Goal :- |
| Goal, !, fail |
| ; |
| true. |
| |
| :- op( 800, fx, if). |
| :- op( 700, xfx, then). |
| :- op( 300, xfy, or). |
| :- op( 200, xfy, and). |
| |
| % Simple forward chaining in Prolog |
| |
| forward :- |
| new_derived_fact( P), % A new fact |
| !, |
| write( 'Derived: '), write( P), nl, |
| assert( fact( P)), |
| forward % Continue |
| ; |
| write( 'No more facts'). % All facts derived |
| |
| new_derived_fact( Concl) :- |
| if Cond then Concl, % A rule |
| not fact( Concl), % Rule's conclusion not yet a fact |
| composed_fact( Cond). % Condition true? |
| |
| composed_fact( Cond) :- |
| fact( Cond). % Simple fact |
| |
| composed_fact( Cond1 and Cond2) :- |
| composed_fact( Cond1), |
| composed_fact( Cond2). % Both conjuncts true |
| |
| composed_fact( Cond1 or Cond2) :- |
| composed_fact( Cond1) |
| ; |
| composed_fact( Cond2). |
| </code> |
| ===== Comments ===== |
| |