我试图在 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
语句覆盖了基本情况。
提前感谢您的帮助!