list - 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)
解决方案
calculate f a b = tail . concatMap (replicate 2) . scanl f a $ b
.
复制位可能有误。如果是这样,那么简单calculate = scanl
。
这翻译了代码,因为文本中的“ [a, f(a,b), f(f(a,b),b, ..]
”与它相矛盾(并且它与文本本身相矛盾,它谈到了“遍历列表” b
)。
推荐阅读
- odoo - 仅显示下属离开 odoo 的访问规则
- android - 未在 Android 应用程序中获得 Facebook 权限屏幕。使用 Facebook SDK 4.5
- ruby-on-rails - 从 Rails Mongoid 中克隆一个 mongodb 集合
- ios - 从继承的类访问超类属性
- javascript - 撇号 cms:保存文档时出错
- c - 尝试从 /dev/video0 读取设备信息时出现 Video4Linux ioctl 错误 (#25)
- mysql - 如何根据MYSQL中ID的增加次数的顺序获得不同的ID
- java - 在字符串第 n 次出现后追加字符串
- javascript - 如何解决角核心 element_ref.d.ts 中的给定错误?
- openshift - Openshift在jenkinsfile中检索分支名称