*
/******************************************************************/ /* */ /* call : extend_clause_loop (+NEGATIVE,+POSITIVE,+SEED, */ /* -CLAUSE) */ /* */ /* arguments : NEGATIVE = Negative examples of GOAL */ /* POSTITIVE = Positive examples left to be covered*/ /* SEED = The most general clause defining */ /* the predicate. */ /* CLAUSE = The extended clause which covers no */ /* negative examples, or which cannot */ /* be improved. */ /* */ /******************************************************************/ /* This predicate corresponds to the "inner loop" in Quinlan 90 */ /* and in a general to specific manner. At each iteration a */ /* premises is determined and added to SEED, until it covers no */ /* negative examples, or until the information gain does not */ /* improve. If the latter happens, determinate literals may be */ /* added to the clause (see Quinlan 91), depending on the value */ /* of the switch foil_det_lit_bound/1. This switch determines the */ /* maximum number of determinate literals which can be added to */ /* the clause. */ /******************************************************************/ extend_clause_loop(Nxs0, Pxs0, Clause0, Clause) :- ( Nxs0 = [] -> Clause = Clause0 ; write('Specializing current clause: '), nl, portray_clause(Clause0), nl, write('Covered negatives:'), nl, write(Nxs0), nl, nl, write('Covered positives:'), nl, write(Pxs0), nl, nl, generate_possible_extensions(Clause0, Ls), info_value(Clause0, Pxs0, Nxs0, Info), best_next_clause(Ls, Nxs0, Pxs0, Clause0, Info, 0, Clause0, Clause1), ( Clause0 == Clause1 -> foil_det_lit_bound(DLB), nl, write('No improvement -- trying determinate literals ...'), nl, bounded_determinate_literals(DLB, Ls, Clause0, Pxs0, Nxs0, Ds), ( Ds = [] -> write('No determinate literals found.'), nl, covered_examples(Clause1, Nxs0, Nxs1), write('WARNING -- clause covers negatives:'), nl, write(Nxs1), nl, Clause = Clause1 ; write('Adding determinate literals: '), write(Ds), nl, add_literals(Ds, Clause0, Clause2), covered_examples(Clause2, Nxs0, Nxs1), extend_clause_loop(Nxs1, Pxs0, Clause2, Clause) ) ; covered_examples(Clause1, Pxs0, Pxs1), covered_examples(Clause1, Nxs0, Nxs1), extend_clause_loop(Nxs1, Pxs1, Clause1, Clause) ) ).
*