我有以下功能:
fillNonDrivers(Car, Pmd, Plo, ListOfPassengers) :-
select(Passenger, Pmd, Plo1),
Passenger = [_,n,_],
/* etc */
我通过以下方式使用 trace on 调用它:
fillNonDrivers([hello, 2], [[david, n, punk]], PLO, LOP).
1 1 Call: fillNonDrivers([hello,2],[[david,n,punk]],_29,_30) ? c
2 2 Call: select(_111,[[david,n,punk]],_112) ? c
2 2 Exit: select([david,n,punk],[[david,n,punk]],[]) ? c
2 2 Redo: select([david,n,punk],[[david,n,punk]],[]) ? c
2 2 Fail: select(_99,[[david,n,punk]],_100) ? c
1 1 Fail: fillNonDrivers([hello,2],[[david,n,punk]],_29,_30) ? c
no
我不明白为什么在上面的跟踪中调用了重做。不应该选择“工作”,因此调用的下一行是
Passenger = [_,n,_],
有人可以在这里帮助解释重做的外观吗?先感谢您。