gpt4 book ai didi

list - Haskell 中的所有列表轮换

转载 作者:行者123 更新时间:2023-12-03 14:56:47 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to define a rotates function

(8 个回答)


4年前关闭。




我有一个旋转列表的功能:

rotate :: [a] -> [a]
rotate [] = []
rotate (x:xs) = xs ++ [x]

现在我想要一个函数,它给出一个有限列表的每个可能旋转的列表:
rotateAll :: [a] -> [[a]]

在命令式语言中,我会做类似(在伪代码中)
for i = 1 to length of list
append list to rotateList
list = rotate(list)

当然,命令式思考可能无法帮助我找到解决这个问题的有效方法。我正在寻找一些关于如何解决这个问题的提示。

其他想法:

为了解决这个问题,我有两个问题需要解决。首先,我需要反复轮换一个列表并将每个结果收集到一个列表中。所以第一个解决方案需要做类似的事情
rotateAll xs = [xs (rotate xs) (rotate (rotate xs)) (rotate (rotate (rotate xs))) ...]

当然,我不知道要这样做多少次。我很乐意无限地执行此操作,然后使用 take (length xs)获得我想要的有限数量的列表。这实际上说明了第二个问题:确定何时停止。不知道有没有用 take是解决问题的最有效或最优雅的方法,但是当我输入它时我想到了它并且应该可以工作。

附录:
现在我已经找到了两种解决方案,或者有提示。我很乐意欢迎任何其他更快或使用不同方法的解决方案。谢谢!

最佳答案

使用 Data.List 中的预定义函数!您可以使用四个函数调用、无递归和无 rotate 获得所有旋转的列表功能。

您要求不要在此处发布完整的解决方案。想看的 friend 可以在http://pastebin.com/atGiw1ig上看到完整的解决方案(一行代码) .

关于list - Haskell 中的所有列表轮换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870536/

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