相关疑难解决方法(0)

如何定义旋转功能

如何定义生成给定列表的所有旋转的旋转函数?

例如:旋转 [1,2,3,4] =[[1,2,3,4],[2,3,4,1],[3,4,1,2],[4,1,2,3]]

我写了一个可以重新排列顺序的shift函数

 shift ::[Int]->[Int]

 shift x=tail ++ take 1 x
Run Code Online (Sandbox Code Playgroud)

但我不知道如何生成这些新数组并将它们附加在一起.

haskell

11
推荐指数
3
解决办法
2949
查看次数

获取Haskell中列表的所有排列

我试图从头开始这样做,而不使用标准库之外的库.继承我的代码:

permutations :: [a] -> [[a]]
permutations (x:xs) = [x] : permutations' xs
    where permutations' (x:xs) = (:) <$> [x] <*> split xs
            split l = [[x] | x <- l]
Run Code Online (Sandbox Code Playgroud)

问题是这只产生一个非确定性计算的分支.理想情况下我想要

(:) <$> [x] <*> ((:) <$> [x] <*> ((:) <$> [x] <*> ((:) <$> [x] <*> xs)))
Run Code Online (Sandbox Code Playgroud)

但我找不到干净利落的方法.我想要的结果是这样的:

permutations "abc" -> ["abc", "acb", "bac", "bca", "cab", "cba"]
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

haskell

11
推荐指数
5
解决办法
1万
查看次数

标签 统计

haskell ×2