haskell - simpel Haskell 列表按模式排序/洗牌

标签 haskell

我正在尝试制作一种算法,该算法接收列表并根据以下操作步骤重新组织列表。

[1 , 2, 3, 4 , 5, 6, 7 , 8, 9 ]
[1 , 3, 5 , 7, 9 ] ++ [2 , 4, 6, 8 ]
[1 , 3, 5 , 7, 9 ] ++ [2 , 6] ++ [ 4, 8 ]
[1 , 3, 5 , 7, 9 , 2, 6 , 4, 8 ]

我已经走到这一步了,然后我不知道下一步该做什么。有什么帮助吗?

ever xs = if xs == [] then [ ] else head xs: ever (drop 1 residue)
    Where residue 1 drop = xs

最佳答案

这是 CPS 版本:

shuffle [] = []
shuffle xs = shuffle' xs shuffle where
    shuffle' (x:y:xs) cont = x : shuffle' xs (cont . (y:))
    shuffle'      xs  cont = xs ++ cont []

关于haskell - simpel Haskell 列表按模式排序/洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26759867/

相关文章:

haskell - Haskell 中的隐式静态类型转换(强制)

haskell - 以编程方式检查可执行文件是否存在而不运行它或使用 `which`

haskell - ST 引用透明吗?

list - 映射列表,最后一个列表元素除外

haskell - 编译器开关打开/关闭调试消息?

haskell - 评估每个节点具有任意数量依赖项的强类型计算图

parsing - F# 解析器组合器

haskell - 自定义 'fold' 函数需要计数器

haskell - 在 Haskell 中,当我们使用 do block 时,它如何确定要使用哪个 monad?

Haskell - 无法将预期类型 ‘b’ 与实际类型 ‘a’ 匹配