====== Rule interpreter 3 ====== {{tag>rule interpreter framework}} ===== Description ===== A skeleton two-level rule interpreter **Source**: The Art of Prolog ===== Download ===== Program source code: {{rule_interpreter_3.pl}} ===== Listing ===== /* monitor(Goal) :- Succeeds if a result of yes is returned from solving Goal at the solve level, or when the end of the computation is reached. */ :- op(40,xfy,&). :- op(30,xf,is_true). monitor(Goal) :- solve(Goal,Result), filter(Result). monitor(Goal). filter(yes). % filter(no) fail. /* solve(Goal,Result) :- Given a set of rules of the form rule(A,B,Name), Goal has Result yes if it follows from the rules and no if it does not. */ solve(A,yes) :- fact(A). solve(A,Result) :- rule(A,B,Name), solve_body(B,Result). solve(A,no). solve_body(A&B,Result) :- solve(A,ResultA), solve_and(ResultA,B,Result). solve_body(A is_true,Result) :- solve(A,Result). solve_and(no,A,no). solve_and(yes,B,Result) :- solve(B,Result). % Program 17.18: A skeleton two-level rule interpreter ===== Comments =====