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