我有這方面的條款:Prolog的切割操作行爲
a(1).
a(2).
b(a).
c(A,B,C) :- a(A),d(B,C).
c(A,B,C) :- b(A),d(B,C).
d(B,C) :- a(B),!,a(C).
d(B,_) :- b(B).
當我運行查詢C(X,Y,Z)的答案是:
X = 1, Y = 1, Z = 1 ;
X = 1, Y = 1, Z = 2 ;
X = 2, Y = 1, Z = 1 ;
X = 2, Y = 1, Z = 2 ;
X = a, Y = 1, Z = 1 ;
X = a, Y = 1, Z = 2.
所以基本上,切割操作(在這裏d(B,C): - a(B),!,a(C)。)忽略最近的選擇點,即它不會進一步搜索d()和a()。我雖然認爲這一切忽略了以前的所有選擇點,並且不會做任何回溯。
有人可以解釋確切的行爲,爲什麼我錯了?