Sur le nombres de réponses à une question prolog 
Author Message
 Sur le nombres de réponses à une question prolog

J'utilise gnu-prolog et je cherche avoir toutes les rponses
possibles une question prolog. (Excusez mon vocabulaire : je
dbute). Hors lorsque je charge une fonction avec consult, une
fonction du type member :

mem(X,[X|_]).
mem(X,[_|Q]):- mem(X,Q).

la question :
| ?- mem(X,[a,b,c]).

X = a ?

yes
| ?-
voil ce que j'ai obtenu. A la fac nous utilisons Eclipse et je n'ai
pas ce problme avec la fonction compile, dont je ne connais
pas d'autre equivalent que consult.

1)Est-ce que j'ai mal programm ma fonction mem, et que c'est
pour cela que je n'obtiens qu'une seule rponse? Ou est-ce ma
question ?
Si oui y aurait-t-il quelqu'un d'assez courageux pour lire mon
programme missionnaire rsolvant le fameux problme des
{*filter*}es et des missionnaires et qui puisse me dire o est le
problme des rponses.

2)Si non comment qu'elle fonction dois-je utiliser pour charger
des routines crites?

Merci d'avance

/***************Pour les courageux*****************/

%       ****************************************
%       *    {*filter*}ES ET MISSIONNAIRES       *
%       ****************************************

Connaissez-vous le problme des missionnaires ?

si non le voici :
==========================================================================
3 missionnaires(M) et 3 {*filter*}es(C) sont sur la rive gauche (g)
d'une rivire
ils disposent d'une barque ne pouvant contenir que 2 passagers et
necessitant un
nautier (M ou C) pour tre manoeuvre. Sur aucune des deux rives le
nombre de {*filter*}es ne doit exceder celui de missionnaires sinon ces
derniers se font manger. Le problme est de faire traverser tout le
monde sur la rive de droite.
===========================================================================

%fonctions utilises.
not(P):-P,!,fail.
not(_).
member(X,[X|_]).
member(X,[_|Q]):- member(X,Q).

% Representation d'un etat
s(Missionnaires,{*filter*}es,Missionnaire_barque,{*filter*}e_barque,Barque).
%l'tat signifie que la barque est sur la rive Barque (g ou d), avec
Missionnaire_barque missionnaires
%Et {*filter*}e_barque {*filter*}es son bord.
%Et sur la rive gauche il y a E1 Missionnaires et E2 {*filter*}es.
% pour voir les solutions faire:  resultat(S).

etat_init(s(3,3,0,0,g)).
etat_final(s(0,0,0,0,d)).
conditions_domaine(E1,E2,B1,B2):-E1>=0, E2>=0, E1<4, E2<4, 2>=B1,
B1>=0, 2>=B2, B2>=0.

/******************************Etats
accepts*****************************/

legal(s(E1,E2,B1,B2,_)):-
conditions_domaine(E1,E2,B1,B2),        E1>=E2,(E2+B2)>=(E1+B1).
/*il faut que sur la berge de gauche et sur celle de droite il y ait
plus de missionnaires que de {*filter*}es*/
legal(s(E1,E2,B1,B2,_)):-
conditions_domaine(E1,E2,B1,B2),        E1>=E2,E1+B1=3. /*pas de missionnaire
droite*/
legal(s(E1,E2,B1,B2,_)):-
conditions_domaine(E1,E2,B1,B2),        E1=0,(E2+B2)>=B1. /*pas de
missionnaire gauche*/

/* 'voyage' correspond la relation 'appliquer'*/

/*EMBARQUEMENT g*/
/*barque vide*/
        voyage( s(3,3,0,0,g), s(2,2,1,1,g) ). /* 1M+1C embarquent */
        voyage( s(3,2,0,0,g), s(2,1,1,1,g) ).
        voyage( s(3,1,0,0,g), s(2,0,1,1,g) ).

        voyage( s(2,2,0,0,g), s(1,1,1,1,g) ).
        voyage( s(2,1,0,0,g), s(1,0,1,1,g) ).

        voyage( s(1,1,0,0,g), s(0,0,1,1,g) ).

/**/
        voyage( s(X1,3,0,0,g), s(X1,2,0,1,g) ).                 /* 1C  */
        voyage( s(X1,2,0,0,g), s(X1,1,0,1,g) ).
        voyage( s(X1,1,0,0,g), s(X1,0,0,1,g) ).

/**/
        voyage( s(3,X2,0,0,g), s(2,X2,1,0,g) ).                 /* 1M */
        voyage( s(2,X2,0,0,g), s(1,X2,1,0,g) ).
        voyage( s(1,X2,0,0,g), s(0,X2,1,0,g) ).

/**/
        voyage( s(3,X2,0,0,g), s(1,X2,2,0,g) ).                 /* 2M */
        voyage( s(2,X2,0,0,g), s(0,X2,2,0,g) ).

/**/
        voyage( s(X1,3,0,0,g), s(X1,1,0,2,g) ).                 /* 2C */
        voyage( s(X1,2,0,0,g), s(X1,0,0,2,g) ).

/**/
/*barque avec 1M*/
        voyage( s(X1,3,1,0,g), s(X1,2,1,1,g) ).       /* 1C embarque*/
        voyage( s(X1,2,1,0,g), s(X1,1,1,1,g) ).
        voyage( s(X1,1,1,0,g), s(X1,0,1,1,g) ).

/**/
        voyage( s(3,X2,1,0,g), s(2,X2,2,0,g) ).       /* 1M  */
        voyage( s(2,X2,1,0,g), s(1,X2,2,0,g) ).
        voyage( s(1,X2,1,0,g), s(0,X2,2,0,g) ).

/**/
/*barque avec 1C*/
        voyage( s(3,X2,0,1,g), s(2,X2,1,1,g) ).       /* 1M embarque*/
        voyage( s(2,X2,0,1,g), s(1,X2,1,1,g) ).
        voyage( s(1,X2,0,1,g), s(0,X2,1,1,g) ).

/**/
        voyage( s(X1,3,0,1,g), s(X1,2,0,2,g) ).       /* 1C  */
        voyage( s(X1,2,0,1,g), s(X1,1,0,2,g) ).
        voyage( s(X1,1,0,1,g), s(X1,0,0,2,g) ).

/*TRAVERSEE DE g d*/
voyage( s(X1,X2,1,1,g), s(X1,X2,1,1,d) ).       /* 1M+1C traversent */
voyage( s(X1,X2,2,0,g), s(X1,X2,2,0,d) ).       /* 2M */
voyage( s(X1,X2,1,0,g), s(X1,X2,1,0,d) ).       /* 1M */
voyage( s(X1,X2,0,2,g), s(X1,X2,0,2,d) ).       /* 2C */
voyage( s(X1,X2,0,1,g), s(X1,X2,0,1,d) ).       /* 1C */

/*DEBARQUEMENT d*/
voyage( s(X1,X2,1,1,d), s(X1,X2,0,0,d) ).       /* 1M+1C dbarquent */
voyage( s(X1,X2,1,1,d), s(X1,X2,1,0,d) ).       /* 1C  */
voyage( s(X1,X2,1,1,d), s(X1,X2,0,1,d) ).       /* 1M */

voyage( s(X1,X2,2,0,d), s(X1,X2,0,0,d) ).       /* 2M dbarquent*/
voyage( s(X1,X2,2,0,d), s(X1,X2,1,0,d) ).       /* 1M */

voyage( s(X1,X2,1,0,d), s(X1,X2,0,0,d) ).       /* 1M dbarque*/

voyage( s(X1,X2,0,2,d), s(X1,X2,0,0,d) ).       /* 2C dbarquent*/
voyage( s(X1,X2,0,2,d), s(X1,X2,0,1,d) ).       /* 1C */

voyage( s(X1,X2,0,1,d), s(X1,X2,0,0,d) ).       /* 1C dbarque*/

/*EMBARQUEMENT d*/
voyage( s(X1,X2,0,0,d), s(X1,X2,1,1,d) ).       /* 1M+1C embarquent */
voyage( s(X1,X2,0,0,d), s(X1,X2,1,0,d) ).                       /* 1C  */
voyage( s(X1,X2,0,0,d), s(X1,X2,0,1,d) ).                       /* 1M */
voyage( s(X1,X2,0,0,d), s(X1,X2,2,0,d) ).                       /* 2M */
voyage( s(X1,X2,0,0,d), s(X1,X2,0,2,d) ).                       /* 2C */

voyage( s(X1,X2,1,0,d), s(X1,X2,1,1,d) ).       /* 1C embarque*/
voyage( s(X1,X2,1,0,d), s(X1,X2,2,0,d) ).       /* 1M  */

voyage( s(X1,X2,0,1,d), s(X1,X2,1,1,d) ).       /* 1M embarque*/
voyage( s(X1,X2,0,1,d), s(X1,X2,0,2,d) ).       /* 1C  */

/*TRAVERSEE DE d g*/
voyage( s(X1,X2,1,1,d), s(X1,X2,1,1,g) ).       /* 1M+1C traversent */
voyage( s(X1,X2,2,0,d), s(X1,X2,2,0,g) ).                  /* 2M */
voyage( s(X1,X2,1,0,d), s(X1,X2,1,0,g) ).                  /* 1M */
voyage( s(X1,X2,0,2,d), s(X1,X2,0,2,g) ).                  /* 2C */
voyage( s(X1,X2,0,1,d), s(X1,X2,0,1,g) ).                  /* 1C */

/*DEBARQUEMENT g*/
/*1 personne bord*/
        voyage( s(2,X2,1,0,g), s(3,X2,0,0,g) ).       /* 1M debarque */
        voyage( s(1,X2,1,0,g), s(2,X2,0,0,g) ).
        voyage( s(0,X2,1,0,g), s(1,X2,0,0,g) ).

/**/
        voyage( s(X1,2,0,1,g), s(X1,3,0,0,g) ).       /* 1C  */
        voyage( s(X1,1,0,1,g), s(X1,2,0,0,g) ).
        voyage( s(X1,0,0,1,g), s(X1,1,0,0,g) ).

/**/
/*2 personnes bord*/
        voyage( s(2,X2,2,0,g), s(3,X2,1,0,g) ).       /* 1M */
        voyage( s(1,X2,2,0,g), s(2,X2,1,0,g) ).
        voyage( s(0,X2,2,0,g), s(1,X2,1,0,g) ).

        voyage( s(2,X2,1,1,g), s(3,X2,0,1,g) ).       /* 1M */
        voyage( s(1,X2,1,1,g), s(2,X2,0,1,g) ).
        voyage( s(0,X2,1,1,g), s(1,X2,0,1,g) ).

/**/    
        voyage( s(1,X2,2,0,g), s(3,X2,0,0,g) ).       /* 2M */
        voyage( s(0,X2,2,0,g), s(2,X2,0,0,g) ).

/**/
        voyage( s(X1,1,0,2,g), s(X1,3,0,0,g) ).       /* 2C */
        voyage( s(X1,0,0,2,g), s(X1,2,0,0,g) ).

/**/
        voyage( s(X1,2,0,2,g), s(X1,3,0,1,g) ).       /* 1C */
        voyage( s(X1,1,0,2,g), s(X1,2,0,1,g) ).
        voyage( s(X1,0,0,2,g), s(X1,1,0,1,g) ).        

        voyage( s(X1,2,1,1,g), s(X1,3,1,0,g) ).       /* 1C */
        voyage( s(X1,1,1,1,g), s(X1,2,1,0,g) ).
        voyage( s(X1,0,1,1,g), s(X1,1,1,0,g) ).

/*'transition_possible' correspond la relation 'appliquable' */
transition_possible(Etat1,Etat2):-voyage(Etat1,Etat2),legal(Etat2).

solution(E,C,S):-etat_final(E),S=C.
solution(E,C,S):-transition_possible(E,A),not(member(A,C)),solution(A,[A|C],S).
/*Not member permet qu'on n'est pas un tat qui se rpte c'est--dire
pas de circuit dans le transbordement*/

resoudre(S):-etat_init(E),solution(E,[E],S).

renverse([],[]).
renverse([X|Y],Z):-renverse(Y,M),ajoute(M,[X],Z).
resultat(R):-resoudre(S),renverse(S,R).

/*****************************************************************************************/

Merci ceux qui ont lu jusqu'ici. Si vous avez des exos
intressants comme celui-ci n'hesitez pas les poster.



Mon, 31 May 2004 04:02:26 GMT  
 Sur le nombres de réponses à une question prolog

Quote:

> J'utilise gnu-prolog et je cherche avoir toutes les rponses
> possibles une question prolog. (Excusez mon vocabulaire : je
> dbute). Hors lorsque je charge une fonction avec consult, une
> fonction du type member :

> mem(X,[X|_]).
> mem(X,[_|Q]):- mem(X,Q).

> la question :
> | ?- mem(X,[a,b,c]).

> X = a ?

> yes
> | ?-
> voil ce que j'ai obtenu. A la fac nous utilisons Eclipse et je n'ai
> pas ce problme avec la fonction compile, dont je ne connais
> pas d'autre equivalent que consult.

> 1)Est-ce que j'ai mal programm ma fonction mem, et que c'est
> pour cela que je n'obtiens qu'une seule rponse? Ou est-ce ma
> question ?

Au prompt '?', vous devez taper ';' pour avoir la solution suivante
(je suppose que RETURN stoppe la rsolution de la question.

[You have to type a semi-colon to get the next solution (if any),
I suppose RETURN stops the exec of current goal.]

Quote:
> Si oui y aurait-t-il quelqu'un d'assez courageux pour lire mon
> programme missionnaire rsolvant le fameux problme des
> {*filter*}es et des missionnaires et qui puisse me dire o est le
> problme des rponses.

Dsol, je ne suis pas assez courageux ;-)

--
Pascal



Mon, 07 Jun 2004 14:57:30 GMT  
 Sur le nombres de réponses à une question prolog
Quote:
> Au prompt '?', vous devez taper ';' pour avoir la solution suivante
> (je suppose que RETURN stoppe la rsolution de la question.

> [You have to type a semi-colon to get the next solution (if any),
> I suppose RETURN stops the exec of current goal.]

Ca marche, merci beaucoup, beaucoup.


Mon, 07 Jun 2004 22:10:12 GMT  
 Sur le nombres de réponses à une question prolog
On Thu, 20 Dec 2001 07:57:30 +0100, Pascal Bouvier

Quote:


>> J'utilise gnu-prolog et je cherche avoir toutes les rponses
>> possibles une question prolog. (Excusez mon vocabulaire : je
>> dbute). Hors lorsque je charge une fonction avec consult, une
>> fonction du type member :

They don't teach English on French universities?..

A.L.



Mon, 07 Jun 2004 22:52:42 GMT  
 Sur le nombres de réponses à une question prolog

Quote:

> On Thu, 20 Dec 2001 07:57:30 +0100, Pascal Bouvier


> >> J'utilise gnu-prolog et je cherche avoir toutes les rponses
> >> possibles une question prolog. (Excusez mon vocabulaire : je
> >> dbute). Hors lorsque je charge une fonction avec consult, une
> >> fonction du type member :

> They don't teach English on French universities?..

On n'enseigne pas le fran?ais chez vous? ....

Quote:
> A.L.

--

Division of Informatics              tel:   44-131-650-2710
Edinburgh University


Tue, 15 Jun 2004 12:36:41 GMT  
 
 [ 5 post ] 

 Relevant Pages 

1. probleme d'interpretation de ligne sur une condition

2. Recherche une formation Python sur la France

3. Info sur le COBOL

4. Cherche aide sur le langage FORTRAN en francais

5. wih (tcl) sur le macintosh

6. PROPOSITION DE MISSION à PARIS

7. Je cherche une distribution de Clarion 4 ou 5

8. création d'une liste de diffusion

9. passage d'un tableau de cluster a une DLL

10. Une version Windows de Scheme ?

11. AVANTAGE DE BLINKER SUR PLINK86 CLIPPER S87

12. Problème de programmation sur les indexs

 

 
Powered by phpBB® Forum Software