考虑以下代码:
a(X) :- b(X),!,c(X),fail.
a(X) :- d(X).
b(1).
b(4).
c(1).
c(3).
d(4).
查询a(X).
产生
1 ?- a(X).
false.
2 ?-
但有了这段代码
a(X) :- b(X),!,c(X).
a(X) :- d(X).
b(1).
b(4).
c(1).
c(3).
d(4).
查询a(X).
结果:
1 ?- a(X).
X = 1.
所以我的问题是,为什么fail/1
产生错误?它应该强制回溯,对吗?然后b(1)
会c(1).
被检查,我想,那为什么会失败呢?