Prolog 序言通配符

Prolog 序言通配符,prolog,Prolog,我有以下条款: a(1). a(a). b(3). b(a). c(A,B) :- b(B),!,a(A). c(X,_) :- a(X),b(X). 查询c(A,B)只返回两个解决方案:A=1,B=3和A=A,B=3。 我跟踪了c(A,B),注意到Prolog甚至没有尝试第二个子句(c(X,))。为什么会这样?Prolog cut谓词,或“!”,它是一个Prolog派生树 请查看其角色谢谢!看来我误解了切割的作用。我认为它致力于第一选择,但只针对正在分析的条款。我认为在一条规则中遇到一个漏洞

我有以下条款:

a(1).
a(a).
b(3).
b(a).
c(A,B) :- b(B),!,a(A).
c(X,_) :- a(X),b(X).
查询
c(A,B)
只返回两个解决方案:
A=1,B=3和A=A,B=3。

我跟踪了
c(A,B)
,注意到Prolog甚至没有尝试第二个子句
(c(X,))
。为什么会这样?

Prolog cut谓词,或“!”,它是一个Prolog派生树


请查看其角色

谢谢!看来我误解了切割的作用。我认为它致力于第一选择,但只针对正在分析的条款。我认为在一条规则中遇到一个漏洞不会对尝试其他规则产生影响。