haskell 如何在使用高阶函数时跟踪索引?[重复]

wfveoks0  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(124)

此问题在此处已有答案

Haskell, 2 list to list of tuples pointwise(3个答案)
5天前关闭。
我是Haskell的新手,我想知道当涉及到高阶类时,我如何能够跟踪索引我试图构建一个函数,它接受[a]列表和一个函数(a-〉Int-〉b),本质上是f(ai,i)并返回list [b]。
我想做的事情是:

higherOrd :: [a]->(a->Int->b)->[b]
higherOrd t f = [f x y | x <- t, y <- [1..length(t)]]

例如,如果我做higherOrd (1,2..10) (+),我得到:

[2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,5,6,7,8,9,10,11,12,13,5,6,7,8,9,10,11,12,13,14,6,7,8,9,10,11,12,13,14,15,7,8,9,10,11,12,13,14,15,16,8,9,10,11,12,13,14,15,16,17,9,10,11,12,13,14,15,16,17,18,10,11,12,13,14,15,16,17,18,19,11,12,13,14,15,16,17,18,19,20]

当我想要得到[2,4,6,8,10,12,14,16,18,20]

6rvt4ljy

6rvt4ljy1#

使用zip

higherOrd :: [a] -> (a -> Int -> b) -> [b]
higherOrd t f = [f x y | (x,y) <- zip f [1..]]

然后,这将同时枚举两个列表。或者我们使用Haskell已经提供的函数:zipWith

higherOrd :: [a] -> (a -> Int -> b) -> [b]
higherOrd t f = zipWith f t [1..]

相关问题