私はPrologで非常に簡単な演習を行っていますが、トレースには理解できないことがあります。プログラムは、>
後続として表される整数の「大なり記号」()です。
greater_than(succ(_), 0).
greater_than(succ(A), succ(B)) :-
greater_than(A, B).
私の問題:リクエストが次のトレースでをgreater_than(succ(succ(succ(0))),succ(0))
生成する理由がわかりません:redo
[trace] ?- greater_than(succ(succ(succ(0))),succ(0)).
Call: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
Call: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (7) greater_than(succ(succ(0)), 0) ? creep
Exit: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
true ;
Redo: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (7) greater_than(succ(succ(0)), 0) ? creep
Fail: (6) greater_than(succ(succ(succ(0))), succ(0)) ? creep
false.
なぜredo
ここにあるのですか?どうすればそれを回避できますか(もちろん、カットなしで)?
ところで、あなたが尋ねる前に:いいえ、それはある種の宿題ではありません...