====== Meta interpreter 5 ====== {{tag>metainterpreter}} ===== Description ===== A meta-interpreter for determining a residue **Source**: The Art of Prolog ===== Download ===== Program source code: {{meta_interpreter_5.pl}} ===== Listing ===== /* preduce(Goal,Residue) :- Partially reduce Goal to leave the residue Residue. */ preduce(true,true) :- !. preduce((A,B),(PA,PB)) :- !, preduce(A,PA), preduce(B,PB). preduce(A,B) :- should_fold(A,B), !. preduce(A,Residue) :- should_unfold(A), !, clause(A,B), preduce(B,Residue). preduce(A,A). % Program 18.2: A meta-interpreter for determining a residue ===== Comments =====