折叠会产生一个空列表

Tom*_*law 0 haskell fold

我试图让这会变成一个功能[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
Run Code Online (Sandbox Code Playgroud)

要创建我正在使用的最终列表foldl:

foldl (\acc x -> (prepend acc 2 x)) [] [1..10]

我希望它能够通过[1..10],并为每个元素添加2个x到acc,但当我把它放入GHCI时我才回来[]

我是来自C/C++背景的Haskell的新手

Zet*_*eta 6

如果你有一个空列表,并且你想要添加一些元素,你真的想要返回空列表吗?不.请删除以下行:

prepend [] _ _ = []
Run Code Online (Sandbox Code Playgroud)

毕竟,prepend [] 2 0应该是[0,0]而不是[].除此之外,它工作正常,但你可以写concatMapreplicate:

concatMap (replicate 2) [1..10]
Run Code Online (Sandbox Code Playgroud)

  • 或者,在中缀形式中,`[1..10] >> =复制2`. (2认同)