3

我是序言编程的新手,我可以问一些简单的问题。

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

rotatelist([1,2,3,4],R)   
R=[2,3,4,1]

我尝试了以下代码:

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

3 回答 3

9

为什么要使用递归..这不只是将头部移动到尾部的情况吗?

rotatelist([H|T], R) :- append(T, [H], R).
于 2012-04-21T15:01:24.713 回答
1

这样的事情应该可以解决问题:

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]. 
于 2012-04-21T02:38:59.403 回答
0
旋转列表([H|T],R):- 附加(T,[H],R1),rotatelist_2(R1,R)。
旋转列表_2(R,R)。
旋转列表_2(R1,R):-旋转列表(R1,R)。
于 2012-04-21T12:03:43.437 回答