gpt4 book ai didi

list - F#函数查找列表的所有旋转

转载 作者:行者123 更新时间:2023-12-04 17:09:46 26 4
gpt4 key购买 nike

我在这里有一些F#代码用于递归函数,该函数将n位置向左旋转列表。我是F#的新手,我正在寻找一种方法来修改此代码,以不仅通过n位置输出一个旋转,而且输出所有可能的旋转。

例如,说我有 list :

let list1 = [1; 2; 3; 4]

我想在此列表上调用turn,使输出为:
[ [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.permute函数编写该函数:

let rotate xs =
let length = xs |> List.length
let perm n = xs |> List.permute (fun index -> (index + n) % length)
[1 .. length] |> List.rev |> List.map perm

输出示例(略有格式以提高可读性):
> [1 .. 4] |> rotate;;
val it : int list list =
[[1; 2; 3; 4];
[2; 3; 4; 1];
[3; 4; 1; 2];
[4; 1; 2; 3]]

关于list - F#函数查找列表的所有旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com