succ prec
indice
Predicato "extend_clause_loop/4"
*
/******************************************************************/
/* */
/* 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)
)
).
*
succ prec
indice