【发布时间】:2021-12-08 11:43:23
【问题描述】:
我想要一个高阶函数 g,它将另一个函数 f 应用于整数列表,使得
g = [f x1, f(f x2), f(f(f x3)), … , f^n(xn)]
我知道我可以映射类似的函数
g :: (Int -> Int) -> [Int] -> [Int]
g f xs = map f xs
我也可以应用一个函数 n 次
g f xs = [iterate f x !! n | x <- xs]
其中 n 应用函数的次数。我知道我需要使用递归,所以我认为这两个选项都没有用。
预期输出:
g (+1) [1,2,3,4,5] = [2,4,6,8,10]
【问题讨论】:
-
我不禁觉得
[x0, f x1, f (f x2), ...]——即到处少一个f——会是一种更自然的模式。 -
@DanielWagner,两者都可以,但不要同时使用
scanl-style。 -
@dfeuer 哦,你的意思是我不是唯一一个觉得
scanl总是比我想要的多一个元素在前面? -
@DanielWagner,不。
mapAccumL说对了,但它在退出的过程中破坏了融合。
标签: haskell recursion higher-order-functions