%%% %%% programme Eliza de Weizenbaum qui simule une %%% conversation avec un thérapeute. %%% Le programme original a été fourni par Michel Boyer. %%% Les formules françaises sont inspirées de %%% Wertz, Lisp, Masson, 1985, p180 :- consult('entree.pro'), consult('sortie.pro'), consult('hasard.pro'), consult('listes.pro'). % autre nom pour "concat" pour indiquer que tout ce qui % nous intéresse ici c'est de sauter un bout de phrase % attention le résultat est dans le deuxième parametre !!! :- op(900,fy,'...'). ...(X,Y,Z) :- concat(X,Z,Y). eliza :- write(' Oui, tu peux tout me dire!'), nl, write('|: '), repeat, lire_les_mots(Entree), eliza(Entree). eliza([bonsoir]) :- write(merci), nl, !. eliza(Entree) :- repondre(Reponse,Entree,[]), !, ecrire_les_mots(Reponse), fail. %% Génération de la réponse à une entrée du patient. repondre(Output,Entree,[]):- modele(Input,Output),phrase(Input,Entree). %% modèles de la réponse ((Patron DCG d'entrée),Chaine de sortie) modele(([je,ne,suis,pas], ...X), [pourquoi,n,etes,vous,pas | X]). modele((..._, [prolog], ..._), [alors,vous,savez,programmer]). modele((..._, [lisp], ..._), [alors,vous,ne,savez,pas,programmer]). modele((..._, [X], ..._, {important(X)}),[dites,m,en,plus,sur,votre,X]). modele(([_,_,_]), [hmmm]). modele(([non]), [vous,etes,bien,negatif]). modele(([_], {ok(0.33)}), [c,est,un,peu,court]). modele(([_], {ok(0.5)}), [vous,n,etes,pas,bavard]). modele(([_]), [vous,m,en,direz,tant]). modele((..._,{ok(0.33)}), [je,ne,vous,suis,pas,tres,bien]). modele((..._,{ok(0.5)}), [ca,alors]). modele((..._), [n,importe,quoi]). % ne réussit qu'avec probabilité P ok(P):- hasard(X),!,X