1
我有以下条款: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 and A = a, B = 3.
我跟踪c(A,B)
,发现Prolog的甚至没有尝试第二条(c(X,_))
。为什么?
我有以下条款: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 and A = a, B = 3.
我跟踪c(A,B)
,发现Prolog的甚至没有尝试第二条(c(X,_))
。为什么?
序言剪切谓词或'!',消除选择是一个Prolog派生树。
请检查其作用here
谢谢!我似乎误解了剪辑的作用。我认为它承诺第一选择,但只限于分析的条款。我认为遇到削减一条规则对尝试其他规则没有任何影响。 – 2011-12-15 10:09:14