次のコードを検討してください。
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
生成がfalseになるのですか? バックトラックを強制するはずですよね?次にb(1)
、c(1).
チェックされると思いますが、なぜ失敗するのですか?