对于给定的事实:
trust_direct(p1, p2).
trust_direct(p1, p3).
trust_direct(p2, p4).
trust_direct(p2, p5).
trust_direct(p5, p6).
trust_direct(p6, p7).
trust_direct(p7, p8).
trust_direct(p100, p200).
这个解决方案:
trusts(A, B) :-
trust_direct(A, B).
trusts(A, C) :-
trust_direct(A, B),
trusts(B, C).
...用于改善Prolog 中描述的堆栈溢出问题:检查传递性以获取简单的事实。
解决方案本身就像一个魅力。但是,我对双倍的trust_direct(A, B)
. 为什么这是必要的?
谓词不应该trusts(A, C)
已经涵盖了trust_direct(A, B)
关系吗?