Prolog程序,我不知道

时间:2015-02-02 01:15:33

标签: prolog prolog-dif

我有一个性别数据库:

前:

woman(jhon).
man(Pat)
man(leo), etc. 

我需要为网球比赛写一个函数(混合双打:每边2个不同的性别)。所以如果你要求我们说:

matchMixte(equipe(X,emma),equipe(Y,Z)) , X, Y, Z应该返回可能的合作伙伴组合。

对不起法国人。

  • equipe意味着团队。
  • homme意味着男人
  • 女人女人

我已经有很多东西,但我知道我走错了路。如果你能帮助我,因为我会理解

到目前为止,这是我的工作。

matchMixte(equipe(X,Y),equipe(X1,Y1)):-
femme(X),homme(Y),
femme(X1),homme(Y1),
 not(X=Y),not(X=Y1),not(X1=Y1),not(X=X1),not(Y=X1),not(Y1=Y).
matchMixte(equipe(X,Y),equipe(X1,Y1)):-
femme(X),homme(Y),
femme(Y1),homme(X1),
 not(X=Y),not(X=Y1),not(X1=Y1),not(X=X1),not(Y=X1),not(Y1=Y).

matchMixte(equipe(X,Y),equipe(X1,Y1)):-
femme(X1),homme(Y1);
femme(X),homme(Y),
 not(X=Y),not(X=Y1),not(X1=Y1),not(X=X1),not(Y=X1),not(Y1=Y).
matchMixte(equipe(X,Y),equipe(X1,Y1)):-
femme(X1),homme(Y1);
femme(Y),homme(X),

 not(X=Y),not(X=Y1),not(X1=Y1),not(X=X1),not(Y=X1),not(Y1=Y).

1 个答案:

答案 0 :(得分:0)

我不知道你的问题是什么,因为你的第一个谓词工作正常。

我会缩短它,因为你不需要所有这些not谓词:

matchMixte(equipe(X,Y),equipe(X1,Y1)):-
    femme(X),homme(Y),
    femme(X1),homme(Y1),
    not(X=X1),not(Y=Y1).

我这样问:

?- matchMixte(equipe(X,Y),equipe(X1,Y1)),
    write(equipe(X,Y)),
    write(equipe(X1,Y1)),
    nl,
    fail.