我在这里有一些F#代码用于递归函数,它将列表向左旋转n.我是F#的新手,我正在寻找一种修改此代码的方法,不仅可以按n位置输出一次旋转,还可以输出所有可能的旋转.
例如,假设我有列表:
let list1 = [1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)
我想在此列表上调用rotate,以便输出为:
[ [1; 2; 3; 4]; [2; 3; 4; 1]; [3; 4; 1; 2]; [4; 1; 2; 3] ]
Run Code Online (Sandbox Code Playgroud)
我有左移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)
Run Code Online (Sandbox Code Playgroud)
我不知道如何编辑它来执行上面列出的步骤.任何帮助或资源将不胜感激.我应该补充一点,我真的希望函数是递归的.谢谢.