我在 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
这里有?我怎样才能避免它(当然没有削减)?
顺便说一句,在你问之前:不,这不是某种家庭作业......