% % adaptation en français d'une base de données en Prolog` % tirée de % Prolog for Natural Language Processing % Gal, Lapalme, St-Dizier, Sommers % Wiley, 1991. pp36-44 % annoncer que les informations peuvent changer :-dynamic capitale/2, ville/2, langue/2. capitale(france, paris). capitale(belgique, bruxelles). capitale(suisse, zurich). ville(france,toulouse). ville(belgique, anvers). ville(suisse, neuchatel). ville(X,Y):-capitale(X,Y). langue(france,francais). langue(suisse,francais). langue(suisse,allemand). langue(belgique,francais). langue(belgique,flamand). % questions simples demander([Quelle,est,la,capitale,de,B]):-capitale(B,Quelle). demander([Une,ville,de,B]):-ville(B,Une). demander([Une,langue,de,B]):-langue(B,Une). demander([Qu,est,parle,en,B]):-demander([Qu,langue,de,B]). % enonces simples pour ajouter ou enlever des faits. dire([A,est,la,capitale,de,B]):-assert(capitale(B,A)). dire([A,est,une,ville,de,B]):-assert(ville(B,A)). dire([A,est,une,langue,de,B]):-assert(langue(B,A)). dire([A,n,est,pas,la,capitale,de,B]):- retract(capitale(B,A)). dire([A,n,est,pas,une,ville,de,B]):- retract(ville(B,A)). dire([A,n,est,pas,une,langue,de,B]):- retract(langue(B,A)). % affirmations/questions avec feedback a l'usager affirmer([A,est,la,capitale,de,B]):-var(A),!,capitale(B,A). affirmer([A,est,la,capitale,de,B]):-capitale(B,A),!,write('Je le savais deja'). affirmer([A,est,la,capitale,de,B]):-assert(capitale(B,A)),write('merci'). % version plus generale des affirmations/questions affirmer([A,est,une,P,de,B]) :- var(A),!,Q=..[P,B,A], call(Q). affirmer([A,est,une,P,de,B]) :- Q=..[P,B,A], call(Q),!,write('Je le savais deja'). affirmer([A,est,une,P,de,B]) :- Q=..[P,B,A], assert(Q),write('merci'). /*-------- tests de cette grammaire | ?- demander([Quelle,est,la,capitale,de,suisse]). Quelle = zurich ; no | ?- demander([Une,ville,de,france]). Une = toulouse ; Une = paris ; no | ?- demander([Qu,est,parle,en,suisse]). Qu = francais ; Qu = allemand ; no | ?- dire([italien,est,une,langue,de,suisse]). yes | ?- demander([Qu,est,parle,en,suisse]). Qu = francais ; Qu = allemand ; Qu = italien ; no | ?- dire([toulouse,n,est,pas,une,ville,de,france]). yes | ?- demander([Une,ville,de,france]). Une = paris ; no | ?- affirmer([montreal,est,une,ville,de,quebec]). merci yes | ?- affirmer([zurich,est,la,capitable,de,suisse]). no | ?- affirmer([zurich,est,la,capitale,de,suisse]). Je le savais deja yes | ?- affirmer([italien,est,une,langue,de,suisse]). Je le savais deja yes | ?- affirmer([francais,est,une,langue,de,quebec]). merci yes | ?- affirmer([Qu,est,une,langue,de,quebec]). Qu = francais ; no | ?- affirmer([anglais,est,une,langue,de,quebec]). merci yes | ?- affirmer([Qu,est,une,langue,de,quebec]). Qu = francais ; Qu = anglais ; no --------------------------------------------*/