在Prolog中将列表向左移动N次
我试图在Prolog在Prolog中将列表向左移动N次,prolog,failure-slice,Prolog,Failure Slice,我试图在PrologshiftL(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(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
语句涵盖了基本情况
提前感谢您的帮助 以下是相关的程序片段(): 我相信你自己能解决这个问题
有关故障片如何缩小非终止问题的更多示例,请参见。哦,我明白了,所以表达式的顺序实际上很重要。非常感谢。
?- shiftL([1,2,3],-1,L).