首页 > 解决方案 > Haskell递归地将函数应用于每个元素,但首先?

问题描述

所以我一直在做这个程序,它接收一个函数f、一个数字a和一个列表b,它应该返回一个[a, f(a,b), f(f(a,b),b, ..]遍历列表b并使用递归的列表。你们知道如何优化我的代码吗?

calculate :: (a -> b -> a) -> a -> [b] -> [a]
help :: (a -> b -> a) -> a -> [b] -> [a]

help f a (x:xs) = (f a x) : (calculate f (f a x) xs)
help f a [] = []

calculate f a b = a : (help f a b)

标签: listfunctionhaskellrecursionoptimization

解决方案


calculate f a b = tail . concatMap (replicate 2) . scanl f a $ b.

复制位可能有误。如果是这样,那么简单calculate = scanl

这翻译了代码,因为文本中的“ [a, f(a,b), f(f(a,b),b, ..]”与它相矛盾(并且它与文本本身相矛盾,它谈到了“遍历列表b)。


推荐阅读