次の事実と述語を考えると:
sound(time1).
sound(time2).
sun(time3).
relax(X):-sound(X),!,sun(X).
relax(_):-sun(_).
実行すると、「X」が満たされている場合はバックトラックを停止するという(間違っている場合は修正してください)という理由でrelax(S).
取得することが期待されます。S=time1
!
トレースは次のとおりです。
3 ?- trace.
true.
[trace] 3 ?- relax(S).
Call: (6) relax(_G1831) ? creep
Call: (7) sound(_G1831) ? creep
Exit: (7) sound(time1) ? creep
Call: (7) sun(time1) ? creep
Fail: (7) sun(time1) ? creep
Fail: (6) relax(_G1831) ? creep
false.
それでは、Prologは、 (事実であるため)sun(time1)
に満足した後、感嘆符を満たしたにもかかわらず、なぜチェックするのでしょうか。sound(X)
sound(time1)