Pour les Francais :) 
Author Message
 Pour les Francais :)

Bonjour,
je suis etudiant et j'ai besoin de votre aide car j'ai des petits problemes
en prolog... :(
 voici mon enonc suivit de ce que j'ai fait
si quelqu'un peu m'aider a resoudre ce probleme, je le remercie enormement
car cela me permettrait de comprendre un plus ce language pour
les partielles qui approchent :)

----------------------------------------------------------------------------
--------------------------------------------
ceci est le probleme que je dois resoudre :
on considere le probleme du fermier :
une fermier a un loup, une chevre, et un chou sur la rive gauche d'une
rivire. Il souhaite les faire passer sur la rive droite en
utilisant un bateau dans lequel il ne peut emmener qu'un seul des trois ; or
il ne peut laisser le loup avec la chvre, ni la chvre
avec le chou.

Un etat decrit la situation un instant donn. dans ce problme, un etat
est defini par les positions (rive gauche ou rive droite ) du fermier
et de son bateau), du loup, de la chvre et du chou.
Exemple : pos(droite,gauche,droite,gauche) peut reprsenter la situation
suivante : le fermier est sur la rive droite avec la chvre
 ; le loup et le chou sur la rive gauche.

on dfinit 2 tats particuliers : l'tat initial qui correspond ici la
situation o les quatres personnages sont sur
la rive gauche, et l'etat final qu'on cherche a atteindre.

* definir l'etat initial et l'etat final pour le probleme :
etat_initial(pos(......))->;
etat_final(pos(....))->;

Un operateur permet de passer d'un etat a un autre etat. Par exemple,
l'action ou le fermier traverse la riviere avec la
chevre est un operateur. Un operateur est definit par un nom et 2 etats,
l'tat avant l'application de l'oprateur et l'etat
apres :
op(etat1,nom_op,etat2)->....;

Definr les 4 operateurs pour le probleme. On pourra utiliser le predicat
suivant :
autre_rive(gauche,droite)->;
autre_rive(droite,gauche)->;

il faut definir les etats interdits, qui correspondent ici a des situations
ou le loup est seul avec la chevre, ou la chevre est
seul avec le chou :

interdit(pos(.....))->...;

Et on definit le probleme, on cherche maintenant a les resoudre par une
methode generale qu'on pourra appliqu a d'autre probleme de ce
type, defint par un etat initial, un etat final, des etats interdits et des
operateurs.

* Soit E_c, l'etat courant, soit E_s l'etat suivant apres l'application de
l'operateur O, L_e la liste des etats depuis l'etat
initial et L_op la liste des operateurs a appliquer jusqu'a l'etat final.
definir le predicat de recherche de la solution :

recherche ( E_c, L_e, L_op)->op(E_c, O, E_s) ... recherche(E_s, ...);

definir le predicat : resoudre(s) qui resout le probleme en fournissant la
liste S des operateurs a appliqu.

----------------------------------------------------------------------------
--------------------------------------------
Bon voici ce que j'ai fait :
et le probleme : c'est que je n'arrive pas a faire Recherche et solution

etat_initial(pos(gauche,gauche,gauche,gauche))->;
etat_initial(pos(droite,droite,droite,droite))->;

autre_rive(gauche,droite)->;
autre_rive(droite,gauche)->;

op(pos(a,b,c,d),seul,pos(x,b,c,d))->autre_rive(a,x);
op(pos(a,b,c,d),loup,pos(x,y,c,d))->autre_rive(a,x) autre_rive(b,y);
op(pos(a,b,c,d),chevre,pos(x,b,y,d))->autre_rive(a,x) autre_rive(c,y);
op(pos(a,b,c,d),chou,pos(x,b,c,y))->autre_rive(a,x) autre_rive(d,y);

interdit(pos(d,d,g,g))->autre_rive(d,g);
interdit(pos(d,g,g,d))->autre_rive(d,g);

/* je ne sais pas si elle est juste */
recherche(pos(droite,droite,droite,droite),L_e,L_op)->;
recherche(E_c,L_e,<>)->;
recherche(E_c,L_e,<O>.L_op)->op(E_c,O,E_s) not(interdit(E_s))
recherche(E_s,L_e.<E_c>,L_op);



Wed, 26 May 2004 00:23:56 GMT  
 Pour les Francais :)

Quote:

> Bonjour,

> ...
> recherche(E_s,L_e.<E_c>,L_op);

mes excuses, mais je penses que ce forum devrait etre en anglais;
je te comprends tres bien et je pourrais te repondre en francais
(meme etant flamand :-) mais ce newsgroup est mondial et
la langue francaise ... non je ne dirais rien, cherches plutot
des mailing list francais - ici c'est mondial, c'est tout

(for non french reading people: I just told this person that
comp.lang.prolog is in english because it is world-wide; that's
my opinion at least)

Bart Demoen



Wed, 26 May 2004 01:40:16 GMT  
 Pour les Francais :)

Quote:

> Bonjour,
> je suis etudiant et j'ai besoin de votre aide car j'ai des petits problemes
> en prolog... :(
>  voici mon enonc suivit de ce que j'ai fait
> si quelqu'un peu m'aider a resoudre ce probleme, je le remercie enormement
> car cela me permettrait de comprendre un plus ce language pour
> les partielles qui approchent :)

et ca te permettra surtout  de finir ton tp :) petit malin.

...

Quote:
> etat_initial(pos(gauche,gauche,gauche,gauche))->;
> etat_initial(pos(droite,droite,droite,droite))->;

c'est plutot: etat_final(pos(droite,droite,droite,droite))->;

Quote:

> il faut definir les etats interdits, qui correspondent ici a des situations
> ou le loup est seul avec la chevre, ou la chevre est
> seul avec le chou :

> interdit(pos(.....))->...;

> Et on definit le probleme, on cherche maintenant a les resoudre par une
> methode generale qu'on pourra appliqu a d'autre probleme de ce
> type, defint par un etat initial, un etat final, des etats interdits et des
> operateurs.

> * Soit E_c, l'etat courant, soit E_s l'etat suivant apres l'application de
> l'operateur O, L_e la liste des etats depuis l'etat
> initial et L_op la liste des operateurs a appliquer jusqu'a l'etat final.
> definir le predicat de recherche de la solution :

> recherche ( E_c, L_e, L_op)->op(E_c, O, E_s) ... recherche(E_s, ...);

> definir le predicat : resoudre(s) qui resout le probleme en fournissant la
> liste S des operateurs a appliqu.

> ----------------------------------------------------------------------------
> --------------------------------------------
> Bon voici ce que j'ai fait :
> et le probleme : c'est que je n'arrive pas a faire Recherche et solution

...

> /* je ne sais pas si elle est juste */

ce qu'il y'a de bien en informatique c'est qu'il suffit de tester :)) et tu verras
si ca marche.

Quote:
> recherche(pos(droite,droite,droite,droite),L_e,L_op)->;

on te demande d'ecrire un truc generic, => il vaut mieux utiliser le predicat etat_final
recherche(Pos,L_e,L_op)->etat_final(Pos);

Quote:
> recherche(E_c,L_e,<>)->;

?? pourquoi tu fais ca ?

Quote:
> recherche(E_c,L_e,<O>.L_op)-> op(E_c,O,E_s) not(interdit(E_s))

c'est koi cette syntaxe ? tu ecris 'op(E_c,O,E_s) not(interdit(E_s))'
 y'a pas une virgule entre les 2 predicats ? pour faire le ET logique ? c'est du prolog III c'est ca ?

tu n'as pas bien regarde ce que te dis le prof:

Quote:
> recherche ( E_c, L_e, L_op)->op(E_c, O, E_s) ... recherche(E_s, ...);

ca veut dire que recherche est un predicat recursif !! cad que kan tu a fait un mouvement,
 il faut continuer. le cas d'arret etant le cas ou tu es dans l'etat_final
=>
cas d'arret
 recherche(Pos,L_e,L_op)->etat_final(Pos);
cas de recursion
 recherche ( E_c, L_e, L_op)->op(E_c, O, E_s), not(interdit(E_s)), recherche(E_s, ...);

il faut verifier que tu ne boucles pas !! or ici rien n'empeche ton programme
 de ne pas revenir dans un etat deja vu, par exemple ton programme peut par exemple
 essayer indefiniment de faire passer la chevre a droite, puis a gauche, puis a droite, .... rien
 n'empeche ton programme de terminer !! => comment faire pour ne pas boucler ??
il se trouve que le predicat recherche contient en 2eme argument la liste des etats
 deja rencontres, il faut donc s'en servir.

je te donne pas la soluce, faut que tu cherches un peu kan meme.

Quote:
> recherche(E_s,L_e.<E_c>,L_op);

??

apres il faut ecrire resoudre !!
resoudre(S_olution) -> initial(P_os), ... truc qui appel recherche

--
          Yoann  Padioleau,  INSA de Rennes, France,
Opinions expressed here are only mine. Je n'cris qu' titre personnel.
**____   Get Free. Be Smart.  Simply use Linux and Free Software.   ____**



Wed, 26 May 2004 01:48:55 GMT  
 Pour les Francais :)



Quote:

> > Bonjour,

> > ...
> > recherche(E_s,L_e.<E_c>,L_op);

> mes excuses, mais je penses que ce forum devrait etre en anglais;
> je te comprends tres bien et je pourrais te repondre en francais
> (meme etant flamand :-) mais ce newsgroup est mondial et
> la langue francaise ... non je ne dirais rien, cherches plutot
> des mailing list francais - ici c'est mondial, c'est tout

> (for non french reading people: I just told this person that
> comp.lang.prolog is in english because it is world-wide; that's
> my opinion at least)

> Bart Demoen

Euh, je ne te comprends pas trop, si tu ne veux pas m'aider, je le comprends
totalement mais, bon j'estime que l'on peut parler dans toute les langues
pour s'entraider et qu'il est nettement plus simple de le faire dans sa
langue natale !


Wed, 26 May 2004 02:02:05 GMT  
 Pour les Francais :)
J'arrive pas bien comprendre en quel langage tu cris. C'est du prolog
?? ISO ?

Jean Michel LECONTE
http://www.lambda-systems.com



Wed, 26 May 2004 02:08:48 GMT  
 Pour les Francais :)
Merci pour ta reponse :)

tout d'abord, le language prolog que j'utilise et ben c'est le premier
'( et oui je sais il est vieux ms bon, d'apres ma prof : c'est ds la vieille
marmitte q l'on fait les meilleurs soupes :)"
dc c'est pr cela q je ne mets po de virgules ds 'op(E_c,O,E_s)
not(interdit(E_s))

bon sinon je vais essayer de refaire cette fonction avec ton eclairsis{*filter*}t
:) et je peux te reposer des questions si je n'y arrive tjrs po ??

Merci encore :)



Wed, 26 May 2004 02:21:25 GMT  
 Pour les Francais :)
Merci pour ta reponse :)

tout d'abord, le language prolog que j'utilise et ben c'est le premier
'( et oui je sais il est vieux ms bon, d'apres ma prof : c'est ds la vieille
marmitte q l'on fait les meilleurs soupes :)"
dc c'est pr cela q je ne mets po de virgules ds 'op(E_c,O,E_s)
not(interdit(E_s))

bon sinon je vais essayer de refaire cette fonction avec ton eclairsis{*filter*}t
:) et je peux te reposer des questions si je n'y arrive tjrs po ??

Merci encore :)



Wed, 26 May 2004 02:38:28 GMT  
 Pour les Francais :)
% pour le probleme du fermier et ses amis les zanimaux
%
% bon solution vidente (l'enfance de l art) ... non je plaisante ;)
%
% voici  une solution (bien sur ca respecte pas les predicats de l
enonc)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
resoudre(Solution):-recherche((droite,droite,droite,droite),[],(gauche,gauche,gauche,gauche),Solution).

recherche(Avant,_,Avant,[]):-!.
recherche(Avant,Liste_des_actions_deja_faites,Cequejeveuxatteindre,[Mouvement|Listedesactions]):-
        faireunmouvement(Avant,Apres,Mouvement),
        not(member(Apres,Liste_des_actions_deja_faites)),

recherche(Apres,[Avant|Liste_des_actions_deja_faites],Cequejeveuxatteindre,Listedesactions).

faireunmouvement(Avant,Apres,Mouvement):-
        mouvement(Avant,Apres,Mouvement),
        not(interdit(Apres)).

changerive(droite,gauche).
changerive(gauche,droite).

interdit((X,Y,Y,_)):-X \= Y.
interdit((X,_,Y,Y)):-X \= Y.

mouvement((Fermier,Chou,Chevre,Loup),(Fermier2,Chou,Chevre,Loup),'fermier
change de rive'):-
        changerive(Fermier,Fermier2).
mouvement((Fermier,Chou,Chevre,Loup),(Fermier2,Chou2,Chevre,Loup),'fermier
et chou change de rive'):-
        changerive(Chou,Chou2),
        changerive(Fermier,Fermier2).
mouvement((Fermier,Chou,Chevre,Loup),(Fermier2,Chou,Chevre2,Loup),'fermier
et chevre change de rive'):-
        changerive(Chevre,Chevre2),
        changerive(Fermier,Fermier2).
mouvement((Fermier,Chou,Chevre,Loup),(Fermier2,Chou,Chevre,Loup2),'fermier
et loup change de rive'):-
        changerive(Loup,Loup2),
        changerive(Fermier,Fermier2).

% en prolog standard not/1 n'existe pas voici sa definition

not(X):-X,!,fail.
not(_).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% et voici le resultat sous GNU prolog
%
% | ?- resoudre(S).
%  
% S = ['fermier et chevre change de rive','fermier change de
rive','fermier et chou change de rive','fermier et chevre change de
rive','fermier et loup change de rive','fermier change de rive','fermier
et chevre change de rive'] ?
%
% S = ['fermier et chevre change de rive','fermier change de
rive','fermier et loup change de rive','fermier et chevre change de
rive','fermier et chou change de rive','fermier change de rive','fermier
et chevre change de rive'] ?
%
% no
% | ?-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Jean Michel LECONTE



Wed, 26 May 2004 02:38:43 GMT  
 Pour les Francais :)

Quote:
> tout d'abord, le language prolog que j'utilise et ben c'est le premier
> '( et oui je sais il est vieux ms bon, d'apres ma prof : c'est ds la vieille
> marmitte q l'on fait les meilleurs soupes :)"

dire a la prof qu'il y a un prolog ISO
cf http://pauillac.inria.fr/~hodgson/prolog/docs.html

et il y a une difference entre vieille marmitte et marmitte
prhistorique !



Wed, 26 May 2004 03:01:42 GMT  
 Pour les Francais :)

Quote:

> Euh, je ne te comprends pas trop, si tu ne veux pas m'aider, je le comprends
> totalement mais, bon j'estime que l'on peut parler dans toute les langues
> pour s'entraider et qu'il est nettement plus simple de le faire dans sa
> langue natale !

(first the free translation of what I am about to write for non-french people: looking in comp.lang prolog
for someone to explain things to you in french is ok; insisting on having a french conversation here is
no good, even impolite; the net speaks something closer to english;
if generalised, your attitude would destroy the list;
just my opinion; independent of whether I want to help you)

que tu cherches ici qqun pour t'aider avec Prolog en francais, c'est une chose;
c'est pourquoi j'ai pas reagit a ton premier mail;
que tu insistes a conduire une conversation en francais dans comp.lang.prolog,
ca c'est qqch d'autre; c'est un peu con de continuer la conversation
"Pour les Francais" ici; je trouves meme impoli; ici c'est pour le monde entier; le monde entier parle
qqchose qui ressemble l'anglais, pas le francais; ton attitude generalisee par
les autres minorites rendrait cette liste totalement inutile pour tous;
c'est ce que je penses - c'est independant de ma volonte de t'aider

Bart Demoen

PS. flemmish/german/... translation on demand :-)



Wed, 26 May 2004 03:14:18 GMT  
 Pour les Francais :)

Quote:
>J'arrive pas bien comprendre en quel langage tu cris. C'est du prolog
>?? ISO ?

et ben, nous en cours, on nous a appris q ce q j'ecrivais c'etait du prolog
et il ne me semble pas que ce soit du prolog iso !
Mais bon, ce language, je dois l'utiliser encore pdt 1 mois et ce n'est pas
evident car je n'arrive pas a trouver des cours correcte sur le net et donc
c'est pr cela que je vous demande de l'aide dans les tps que l'on
effectue....


Wed, 26 May 2004 18:42:50 GMT  
 Pour les Francais :)
Je viens  de regarder pour prolog et en faite le logiciel que j'utilise
c'est du prolog III.
Mais dans la solution que tu m'as donn et que je te remercie par la mm
occasion, ya certain parametre que je ne comprends pas !

notament qd tu utilises : " !. " et" [] " cela equivault a quoi en francais
??

Merci d'avance



Wed, 26 May 2004 19:24:24 GMT  
 Pour les Francais :)
Quote:

> Je viens  de regarder pour prolog et en faite le logiciel que j'utilise
> c'est du prolog III.
> Mais dans la solution que tu m'as donn et que je te remercie par la mm
> occasion, ya certain parametre que je ne comprends pas !

> notament qd tu utilises : " !. " et" [] " cela equivault a quoi en francais
> ??

> Merci d'avance

! signifie coupure (jelimine les autres solutions)
[] signifie liste vide

in english now

! = cut
[] = means a list without any elements



Wed, 26 May 2004 19:42:25 GMT  
 Pour les Francais :)
Une autre question :
a quoi sert "  not(member (...)) "  ??
Merci


Wed, 26 May 2004 21:29:17 GMT  
 Pour les Francais :)
Quote:

> Une autre question :
> a quoi sert "  not(member (...)) "  ??
> Merci

ca dit que le prochain etat n'a jamais t atteint sinon on pourrait
tourner en boucle ....


Thu, 27 May 2004 04:52:21 GMT  
 
 [ 34 post ]  Go to page: [1] [2] [3]

 Relevant Pages 

1. Une référence pour les secrétaires et les entreprises

2. Pour ceux qui parlent le francais

3. Off topic: Pour ceux qui parlent francais

4. To the french speaking... Pour les francophones

5. guide pour clipper s97 pour ng.exe

6. plug in pour face avant déportée. ou les trouver?

7. Notice en francais

8. FRANCAIS

9. news group, forum, aide... clarion en francais

10. clarion en francais

11. Forth en Francais

12. Un autre SITE FRANCAIS sur FORTH...

 

 
Powered by phpBB® Forum Software