我正在七周内完成七种语言,但是我对 prolog 有一些不明白的地方。我有以下程序(基于他们的 wallace 和 grommit 程序):
/* teams.pl */
onTeam(a, aTeam).
onTeam(b, aTeam).
onTeam(b, superTeam).
onTeam(c, superTeam).
teamMate(X, Y) :- \+(X = Y), onTeam(X, Z), onTeam(Y, Z).
并像这样加载它
?- ['teams.pl'].
true.
但它没有给我以下任何解决方案
?- teamMate(a, X).
false.
它可以解决更简单的问题(如书中所示):
?- onTeam(b, X).
X = aTeam ;
X = superTeam.
并且有解决方案:
?- teamMate(a, b).
true ;
false.
我错过了什么?我已经尝试过使用 gnu prolog 和 swipl。
...还有更多...
当您将“不能成为自己的队友”限制移动到然后结束时:
/* teams.pl */
onTeam(a, aTeam).
onTeam(b, aTeam).
onTeam(b, superTeam).
onTeam(c, superTeam).
teamMate(X, Y) :- onTeam(X, Z), onTeam(Y, Z), \+(X = Y).
它给了我我期望的解决方案:
?- ['teams.pl'].
true.
?- teamMate(a, X).
X = b.
?- teamMate(b, X).
X = a ;
X = c.
是什么赋予了?