Prolog将如何解释这一点?

Prolog将如何解释这一点?,prolog,Prolog,prolog将如何解释这个表达式 a(R) :- b(R,S), b(S,R). 这是否意味着只有当b(R,S)和b(S,R)都为真时,a(R)才会返回真 a(R)仅当b(R,S)和b(S,R)都为真时才会返回true 是。逗号是一个逻辑and。规则: 因此可以解释为: “a(R)保持,因为存在一个S,使得b(R,S)保持,而b(S,R)保持” 例如,如果您有如下数据集: b(a, c). b(a, d). b(c, a). b(b, c). 然后它将在a(a)中成功,因为b(a,c)保持并

prolog将如何解释这个表达式

a(R) :- b(R,S), b(S,R).
这是否意味着只有当b(R,S)和b(S,R)都为真时,a(R)才会返回真

a(R)
仅当
b(R,S)
b(S,R)
都为真时才会返回true

。逗号是一个逻辑and。规则:

因此可以解释为:

a(R)
保持,因为存在一个
S
,使得
b(R,S)
保持,而
b(S,R)
保持”

例如,如果您有如下数据集:

b(a, c).
b(a, d).
b(c, a).
b(b, c).

然后它将在
a(a)
中成功,因为
b(a,c)
保持并且
b(c,a)
。但是对于
a(b)
,它不会成功,因为
b(b,c)
有效,但不会
b(c,b)

是的,逗号与逻辑and非常相似。最好说“如果b(R,s)和b(s,R)都成功(按该顺序)”?因为没有返回值,所以只有成功(意味着目标可以标记为true,变量值可以拾取,在本例中,在
R
)或失败(意味着目标不能标记为true,并且没有变量值)。还要注意的是,
a(R)
可以被其他子句取代,所以这里没有“only”,除非这是唯一的子句。逗号是一个逻辑符号,对于Prolog代码的解释非常有限<代码>a,b很容易变成“a”,如果成功,则变成“b”,这更像是过程语言的“短路”和“。@User9213是的,调用(控件)的顺序传统上是自上而下、从左到右进行的。但是您可以回溯,所以它比过程语言中的要多一些。如果将“,”everywere替换为“->”,那么您确实得到了过程性的结果。(我的一个愿望是控制更加灵活……按照以下思路:
b(a, c).
b(a, d).
b(c, a).
b(b, c).