【发布时间】:2015-01-28 06:36:22
【问题描述】:
所以我一直在做一个我一直在做的练习。我有以下事实:
sd(appleseed0, appleseed1).
sd(appleseed0, apple1).
sd(appleseed1, apple1).
sd(appleseed2, apple1).
sd(appleseed0, apple2).
sd(appleseed1, apple2).
sd(appleseed2, apple2).
这意味着 appleseed1 来自 appleseed0,apple1 来自 appleseed0,等等。我遇到的问题是,如果值被切换,我需要它打印出 false。意思是,当查询为seed(appleseed0, apple1) 时,我希望查询结果为“true”,然后当查询与seed(apple1, appleseed0). 的顺序相反时,我希望查询结果为“false”
现在,我的谓词如下所示:
seed(A,B) :- sd(A,B) ; sd(B,A).
我知道这就是为什么我的查询无论顺序如何都返回 true,但我唯一的另一个想法是:
seed(A,B) :- sd(A,B).
但我不能这样写,因为这会使其成为一个没有错误的无限循环。我怎样才能做到这一点,以使查询在以seed(appleseed2, apple2) 之类的形式显示时为“true”,而在以seed(apple2, appleseed2) 之类的形式显示时为“false”?
【问题讨论】:
-
如果“apple1 来自 appleseed0”,为什么 apple1 也来自 appleseed1?目前还不清楚 sd/2 是什么意思。