在列表中的元素之间添加零?

STO*_*DER 8 haskell list

我正在尝试更改haskell中的列表以在每个元素之间包括0。如果我们有初始清单,[1..20]那么我想将其更改为[1,0,2,0,3..20]

我想做的实际上是在每个函数上使用map,提取元素,然后将其添加到列表中并使用++[0]它,但不确定这是否正确。仍在学习haskell,因此可能会有错误。

我的代码:

x = map classify[1..20] 

classify :: Int -> Int 
addingFunction 0 [Int]


addingFunction :: Int -> [a] -> [a]
addingFunction x xs = [a] ++ x ++ xs 
Run Code Online (Sandbox Code Playgroud)

Jos*_*ica 10

intersperse为此。就import Data.List (intersperse)这样intersperse 0 yourList


ama*_*loy 8

您无法使用来执行此操作map。其基本属性之一map是其输出将始终具有与输入正好一样多的项,因为每个输出元素都对应一个输入,反之亦然。

但是,有一个具有必要功能的相关工具:

concatMap :: (a -> [b]) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)

这样,每个输入项可以产生零个或多个输出项。您可以使用它来构建所需的功能:

between :: a -> [a] -> [a]
sep `between` xs = drop 1 . concatMap insert $ xs
  where insert x = [sep, x]

0 `between` [1..10]
[1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10]
Run Code Online (Sandbox Code Playgroud)

或更简洁的定义between

between sep = drop 1 . concatMap ((sep :) . pure)
Run Code Online (Sandbox Code Playgroud)