如何在prolog中旋转列表?

如何在prolog中旋转列表?,prolog,Prolog,我对prolog编程非常陌生,我可以问一些简单的问题 我想在prolog中将列表向左旋转,如下所示: rotatelist([1,2,3,4],R) R=[2,3,4,1] 我尝试了以下代码: rotatelist([],[]). rotatelist([H1|T1],[H2|T2]) :- rotatelist(H1,T2). 像这样的事情应该会起作用: rotatelist(List, R):- rotatelist(List, R1, H), R = [H|R1]. rot

我对prolog编程非常陌生,我可以问一些简单的问题

我想在prolog中将列表向左旋转,如下所示:

rotatelist([1,2,3,4],R)   
R=[2,3,4,1]
我尝试了以下代码:

rotatelist([],[]).   
rotatelist([H1|T1],[H2|T2]) :- rotatelist(H1,T2).

像这样的事情应该会起作用:

rotatelist(List, R):- rotatelist(List, R1, H), R = [H|R1].
rotatelist([H], [], H).
rotatelist([H|T], L, R) :- rotatelist(T, T1, R), L = [H|T1]. 
旋转列表([H | T],R):-append(T[H],R1),rotatelist_2(R1,R)。 旋转列表2(R,R)。 旋转列表_2(R1,R):-旋转列表(R1,R)。
为什么要使用递归。。这不就是把头移到尾巴的末端吗

rotatelist([H|T], R) :- append(T, [H], R).

rotatelist([1,2],L]),false。
不终止。
rotatelist(L[1,2]),false。
不终止。请看magus的解决方案。这应该是正确的答案,顺便说一句,它可以用来根据参数顺序向右或向左旋转。我终于找到了答案
rotatelist([H|T], R) :- append(T, [H], R).