使用

时间:2016-01-19 21:18:51

标签: prolog

我很难理解为什么我的解决方案"实现一个谓词find_in(X,Y),如果X在Y或X中,则可以在Y中的对象中找到。" 我想出了一个

的解决方案
find_in(X,Y):-in(X,Y);in(Y,Z),in(Z,X)

但这是错的,所以我想知道如何正确地做到这一点,并理解为什么我的答案是错误的。

2 个答案:

答案 0 :(得分:3)

正如Dirk的回答所指出,你可能会交换XY。 为了清关,我会拆分案件。

find_in(X,Y) :- in(X,Y).
find_in(X,Y) :- in(X,Z), in(Z,Y).

作为补充,您可能希望深入多层次。这只是一个小小的调整。

find_in(X,Y) :- in(X,Y).
find_in(X,Y) :- in(X,Z), find_in(Z,Y).

例如,如果a位于bb位于c,依此类推。find_in(a,z)也将评估为true。

答案 1 :(得分:2)

看起来您在子句的第二部分交换了X和Y:

find_in(X,Y):-in(X,Y);in(X,Z),in(Z,Y).
编辑:添加了缺失的'。'在条款的最后。