2011-12-15 59 views
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,_))。为什么?

回答

3

序言剪切谓词或'!',消除选择是一个Prolog派生树。

请检查其作用here

+1

谢谢!我似乎误解了剪辑的作用。我认为它承诺第一选择,但只限于分析的条款。我认为遇到削减一条规则对尝试其他规则没有任何影响。 – 2011-12-15 10:09:14