2011-12-15 96 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