【发布时间】:2014-04-28 04:01:59
【问题描述】:
我这里有一些 F# 代码,用于将列表向左旋转n 个位置的递归函数。我对 F# 非常陌生,我正在寻找一种方法来修改此代码以输出不只是按n 位置的一个旋转,而是所有可能的旋转。
例如,假设我有列表:
let list1 = [1; 2; 3; 4]
我想在这个列表上调用旋转,这样输出是:
[ [1; 2; 3; 4]; [2; 3; 4; 1]; [3; 4; 1; 2]; [4; 1; 2; 3] ]
左移 n 的代码是:
let rec rotate xs k =
match xs, k with
|[], _ -> []
|xs, 0 -> xs
|x::xs, k when k > 0 -> rotate(xs @ [x])(k-1)
|xs, k -> rotate xs (List.length xs + k)
我不确定如何编辑它来执行上面列出的步骤。任何帮助或资源将不胜感激。我应该补充一点,我真的想要递归。谢谢。
【问题讨论】:
标签: list recursion f# rotation