【发布时间】:2011-05-12 20:14:12
【问题描述】:
如何使用 map 和 reduce 计算数字列表的平均值。
理想情况下,我想在列表上调用 reduce 并获得平均回报。您可以选择先映射和过滤该列表。
一个骨架 LISP 尝试:
(defun average (list)
(reduce ... list))
一个骨架 JS 尝试:
function average (array) {
return array.reduce(function() {
..
}, 0);
}
如果您使用某种语言的实际代码发布答案,请解释为好像我是该语言的初学者(我可能会)。
我要避免
的琐碎回答function average (array) {
return sum(array) / array.length;
}
这在末尾使用除法而不是 reduce 语句。我认为这是“作弊”。
[[编辑]]
解决了我自己的问题。如果有人使用 LISP 或 Haskell 的语法糖有一个优雅的解决方案,我会很感兴趣。
【问题讨论】:
-
或许更适合 CodeGolf.SE?
-
一个简单的
reduce又名fold不是mapreduce(就像在Google 框架中一样)。即使您事先map输入也不行。 -
@delnan 抱歉,我的术语混淆了。
-
第一步应该是解决解决方案背后的数学问题。你能想出一个迭代算法来给你想要的东西吗?把它变成
fold应该不会太难。 -
@abesto 解决方案现在看起来很简单。没想到谢谢。
标签: language-agnostic functional-programming average