【发布时间】:2014-06-24 05:40:27
【问题描述】:
我正在尝试在 Prolog shiftL(L1,N,L2) 中建立一个关系,它将 L1 向左移动 N 次(旋转),结果是 L2,因此例如 shiftL([1,2,3], 2, [3,1,2]) 为真。
我尝试了以下方法:
shiftL([],N,[]).
shiftL([X|Xs],1,L) :- append(Xs,[X],L).
shiftL([X|Xs],N,L) :- N1 is N-1 , N=\=1 , shiftL(L1,N1,L) , append(Xs,[X],L1).
而且效果很好,但是在给我结果后它总是继续做其他事情,我得到一个堆栈溢出:
?- shiftL([1,2,3], 2, L).
L = [3, 1, 2] ;
ERROR: Out of global stack
我不知道是什么原因造成的。我以为我用第二行和N=\=1 语句覆盖了基本情况。
提前感谢您的帮助!
【问题讨论】:
标签: prolog failure-slice