2009-09-18 8 views
0

Comment définir une règle relative dans Prolog?Comment définir une règle relative dans Prolog?

C'est ce que je suis arrivé à ce jour:

spouce(X,Y) :- 
    wife(X,Y). 

spouce(X,Y) :- 
    husband(X,Y). 

relative-by-blood(X,Y) :- 
    ancestor(Z,X), 
    ancestor(Z,Y). 


relative(X,Y) :- 
    relative-by-blood(X,Y). 

relative(X,Y) :- 
    spouce(X,Y). 

relative(X,Y) :- 
    relative-by-blood(X,Z), %<- not sure what to do here. 

Merci à l'avance!

+0

Qu'est-ce que vous décrivez en plus de détails? –

+0

Pouvez-vous nous donner un peu plus d'informations. Voir ma réponse ci-dessous en fonction de ce que vous nous avez donné jusqu'à présent, mais j'ai le sentiment qu'il y a plus dans l'histoire que dans la question. –

+2

Sous la syntaxe ISO Prolog, les atomes sans guillemets ne peuvent pas contenir le tiret-minus, de sorte que «relatif-by-blood (X, Y)» ne sera probablement pas analysé comme vous le souhaitez. Au lieu de cela, vous obtiendrez '- (- (relatif, par), sang (X, Y))'. Je pense que vous voulez 'relatif_by_blood (X, Y)', qui analyse un terme composé à deux arguments avec le foncteur 'relative_by_blood' et les arguments' X' et 'Y'. – bcat

Répondre

1

Eh bien, pour commencer, je pense que vous avez besoin de réécrire relative(X,Y) comme:

 
relative(X,Y) :- relative-by-blood(X,Y) ; spouce(X,Y). 

De là, nous avons besoin de plus d'informations (je vais modifier à ajouter à ma réponse si nous obtenons plus). En outre, pouvez-vous nous donner vos règles ancestor?

Questions connexes