【发布时间】:2014-10-31 15:30:52
【问题描述】:
我正在尝试创建一个将[1..10] 转换为[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10] 的函数。到目前为止,我所拥有的是prepend,它将在列表的开头添加许多相同的元素:
-- prepend value num times to the start of list (eg: prepend [] 5 1 = [1,1,1,1,1]
prepend :: [a] -> Int -> a -> [a]
prepend [] _ _ = []
prepend list 0 _ = list
prepend list num value = prepend (value : list) (num - 1) value
要创建最终列表,我使用的是 foldl,如下所示:
foldl (\acc x -> (prepend acc 2 x)) [] [1..10]
我希望它通过[1..10],并且为每个元素添加 2 个 x 到 acc,但是当我将它放入 GHCI 时,我会返回 []
我是来自 C/C++ 背景的 Haskell 新手
【问题讨论】:
-
为什么不
concatMap:hackage.haskell.org/package/base-4.7.0.1/docs/…? -
解决您的问题:您是否检查过您的 prepend 是否有效? (提示:第一个
acc有什么作用 - 当然是[]- 那么第二个acc会是什么?) -
删除
[] _ _ = []模式有效,谢谢!