列表的索引内容 ([a] -> [(Int, a)])
Index contents of a list ([a] -> [(Int, a)])
我想要一个接受列表并索引所有内容的函数:indexed :: [a] -> [(Int, a)]
。或者返回值可以是任何 Monad,只要它包含原始列表的索引值即可。
我认为我需要 StateT 在处理每个元素时临时记住和增加索引号,但我对 Monad 转换器不熟悉,我需要一些帮助来编写函数。
我相信它看起来会像这样(这肯定行不通):
indexed ns = do
n <- ns
i <- get
put (i + 1)
return (i, n)
你会怎么写?
不用那么麻烦。
indexed = zip [0..]
如果你想使用 monad 转换器,我想是这样的:
indexed :: [a] -> [(Int, a)]
indexed ns = evalState (runListT lt) 0 where
lt = do
n <- ListT $ return ns
i <- get <* modify (+1)
return (i, n)
我想要一个接受列表并索引所有内容的函数:indexed :: [a] -> [(Int, a)]
。或者返回值可以是任何 Monad,只要它包含原始列表的索引值即可。
我认为我需要 StateT 在处理每个元素时临时记住和增加索引号,但我对 Monad 转换器不熟悉,我需要一些帮助来编写函数。
我相信它看起来会像这样(这肯定行不通):
indexed ns = do
n <- ns
i <- get
put (i + 1)
return (i, n)
你会怎么写?
不用那么麻烦。
indexed = zip [0..]
如果你想使用 monad 转换器,我想是这样的:
indexed :: [a] -> [(Int, a)]
indexed ns = evalState (runListT lt) 0 where
lt = do
n <- ListT $ return ns
i <- get <* modify (+1)
return (i, n)