【发布时间】:2018-07-18 04:27:38
【问题描述】:
问题是:定义一个函数shuffle :: Int -> [a] -> [a],它接受一个
自然数 n 和一个偶数长度的列表,然后将列表拆分并重新排列 n 次。例如,shuffle 2 [1,2,3,4,5,6] = [1,5,4,3,2,6]。我有一个相应的函数 riffle,但我不知道如何拆分列表。
我的 riffle 函数是:
riffle :: [a] -> [a] -> [a]
riffle [] ys = ys
riffle xs [] = xs
riffle (x:xs)(y:ys) = x : y : riffle xs ys
我开始洗牌,我想,这就是我所拥有的:
shuffle :: Int -> [a] -> [a]
shuffle [] = []
shuffle a xs = (length xs) 'div' a
我试图列出一个列表并将其分成指定为“a”的部分。我是 Haskell 的新手,仍然不确定它是如何工作的:感谢所有帮助。
【问题讨论】:
-
假设我打电话给
shuffle 2 [1,2,3,4,5,6],明天我用相同的输入再次调用它。你希望/期望结果是一样的吗?因为这就是 func prog / Haskell 的全部意义(当然还有更多)。 -
@Elmex80s 我希望输出是一样的,是的。
-
拆分列表:
Data.List.splitAt.