Я думаю, что трассировщик показывает вам все различные ветки, за которыми следовал бэктрейсер. Для этого он, похоже, отменяет одно из успешных утверждений из последней ветки, которую он пробовал, поэтому на этот раз он будет использовать другое решение.
Посмотрите на выполнение в целом, вы наверняка увидите ошибочные предикаты, которые действительно верны, например Fail: (7) lists:member(0, [0, 1, 2])
во втором вычислении.
[trace] ?- group([0, 1, 2], 3).
Call: (6) group([0, 1, 2], 3) ? creep
Call: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
Call: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 0+0 ? creep
^ Exit: (7) 0 is 0+0 ? creep
^ Call: (7) _G724 is 0 mod 3 ? creep
^ Exit: (7) 0 is 0 mod 3 ? creep
Call: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(0, [0, 1, 2]) ? creep
Fail: (7) lists:member(0, [0, 1, 2]) ? creep
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 0+1 ? creep
^ Exit: (7) 1 is 0+1 ? creep
^ Call: (7) _G724 is 1 mod 3 ? creep
^ Exit: (7) 1 is 1 mod 3 ? creep
Call: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(1, [0, 1, 2]) ? creep
Fail: (7) lists:member(1, [0, 1, 2]) ? creep
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 0+2 ? creep
^ Exit: (7) 2 is 0+2 ? creep
^ Call: (7) _G724 is 2 mod 3 ? creep
^ Exit: (7) 2 is 2 mod 3 ? creep
Call: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
Call: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 1+0 ? creep
^ Exit: (7) 1 is 1+0 ? creep
^ Call: (7) _G724 is 1 mod 3 ? creep
^ Exit: (7) 1 is 1 mod 3 ? creep
Call: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(1, [0, 1, 2]) ? creep
Fail: (7) lists:member(1, [0, 1, 2]) ? creep
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 1+1 ? creep
^ Exit: (7) 2 is 1+1 ? creep
^ Call: (7) _G724 is 2 mod 3 ? creep
^ Exit: (7) 2 is 2 mod 3 ? creep
Call: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 1+2 ? creep
^ Exit: (7) 3 is 1+2 ? creep
^ Call: (7) _G724 is 3 mod 3 ? creep
^ Exit: (7) 0 is 3 mod 3 ? creep
Call: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(0, [0, 1, 2]) ? creep
Fail: (7) lists:member(0, [0, 1, 2]) ? creep
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
Call: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 2+0 ? creep
^ Exit: (7) 2 is 2+0 ? creep
^ Call: (7) _G724 is 2 mod 3 ? creep
^ Exit: (7) 2 is 2 mod 3 ? creep
Call: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 2+1 ? creep
^ Exit: (7) 3 is 2+1 ? creep
^ Call: (7) _G724 is 3 mod 3 ? creep
^ Exit: (7) 0 is 3 mod 3 ? creep
Call: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (7) lists:member(0, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(0, [0, 1, 2]) ? creep
Fail: (7) lists:member(0, [0, 1, 2]) ? creep
Redo: (7) lists:member(_G718, [0, 1, 2]) ? creep
Exit: (7) lists:member(2, [0, 1, 2]) ? creep
^ Call: (7) _G721 is 2+2 ? creep
^ Exit: (7) 4 is 2+2 ? creep
^ Call: (7) _G724 is 4 mod 3 ? creep
^ Exit: (7) 1 is 4 mod 3 ? creep
Call: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (7) lists:member(1, [0, 1, 2]) ? creep
Exit: (6) group([0, 1, 2], 3) ? creep
true ;
Redo: (7) lists:member(1, [0, 1, 2]) ? creep
Fail: (7) lists:member(1, [0, 1, 2]) ? creep
Fail: (6) group([0, 1, 2], 3) ? creep
false.
person
mgarciaisaia
schedule
16.11.2012