Sujet: Re: fait positifs et negatifs en prolog
De: miniserveur (l' arobase) ifrance.com
Groupes: fr.comp.ia
Organisation: http://groups.google.com
Date: 20. Dec 2005, 10:27:30
Bonjour, j'ai passé ma nuit sur mon programme ;)
Voici ce que j'obtiens, mais j'avoue encore une fois que je suis
bloqué.
Pourtant je ne vois vraiment pas ce qui ne marche pas.
----------------------------------------------------------------------------------------------------------------------
% pro_PLANING version test
% implementation logique
% exemple :
http://www.recreomath.qc.ca/r_log_20.htm
% 20/12/05
creation([p1|p2|p3|[]]). % faits
% BASE DES CONNAISSANCES
clause([p1,oui]|[p2,oui]|[p3,non]|[]). % (a et b et non c) ou
clause([p1,oui]|[p2,non]|[p3,oui]|[]). % (a et c non et c) ou
clause([p1,non]|[p2,oui]|[p3,oui]|[]). % (non a et b et c) et
clause([p1,non]|[]). % non a
% RESULTAT = il doit rester b, c
% RESOLUTION
effacer_clause([],_a).
effacer_clause([_l|_c],_a):- effacer_litteral(_l,_a,_a),
effacer_clause(_c,_a).
effacer_litteral(_l,[],_a):- oppose(_l,_lprime),
clause(_c),
non(_c,_lprime,_cprime),
effacer_clause(c_prime,[_l|_a]).
effacer_litteral(_l,[_lprime|_aprime],_a):- oppose(_l,_lprime).
effacer_litteral(_l,[_lprime|_aprime],_a):- dif(_l,_lprime).
rep(_r,1):- possible(effacer_clause([_r,non]|[],[])).
rep(_r,2):- possible(effacer_clause([_r,oui]|[],[])).
solution:- creation(_l),
rep(_r,1),write(_r), % ecrire les clauses effacees
rep(_r,2),write(_r). % ecrire les clauses restantes
oppose([_x,oui],[_x,non]).
oppose([_x,non],[_x,oui]).
non([_l|_c],_l,_c).
non([_l|_c],_lprime,[_lprime|_cprime]):- dif(_l,_lprime),
non(_c,_lprime,_cprime).
possible(_p):- impossible(impossbile(_p)).
impossible(p):- p,!.
impossible(p).
vous voyez ce qui ne va pas ?