所以我坚持我一直在做的一个练习。我有以下事实:
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)
,然后在查询顺序相反时产生“假”,例如seed(apple1, appleseed0).
现在,我的谓词看起来像这样:
seed(A,B) :- sd(A,B) ; sd(B,A).
我知道这就是为什么我的查询无论顺序如何都返回真实的原因,但我唯一的另一个想法是:
seed(A,B) :- sd(A,B).
但我不能那样写它,因为这会使它成为一个没有错误的无限循环。我怎样才能做到这一点,以使查询在显示为“真”时显示为“真”,而在显示为seed(appleseed2, apple2)
“假”时显示为“假” seed(apple2, appleseed2)
?