【发布时间】:2021-07-03 20:37:56
【问题描述】:
我正在尝试了解 Prolog 及其使用的解析算法。我找到了这个例子:
hates(1, 2).
hates(2, 3).
hates(3, 4).
jealous(A, B) :- jealous(A, C), jealous(C,B).
jealous(A,B) :- hates(A,B).
但是当我尝试说 jealous(1,4) 时,它会一直溢出并且永远不会产生 true,这很奇怪,好像 1 讨厌 2 和 2 讨厌 3 和 3 讨厌 4,那么 1 也应该讨厌 4。
但是我尝试改变它,所以它是这样的:
hates(1, 2).
hates(2, 3).
hates(3, 4).
jealous(A,B) :- hates(A,B).
jealous(A, B) :- jealous(A, C), jealous(C,B).
然后当我说jealous(1,4)时它就起作用了。
【问题讨论】:
标签: prolog transitive-closure failure-slice