如何使用Ramda将javascript中的简单平均函数转换为无点形式?

如何使用Ramda将javascript中的简单平均函数转换为无点形式?,javascript,functional-programming,currying,pointfree,ramda.js,Javascript,Functional Programming,Currying,Pointfree,Ramda.js,如何将以下简单的average函数转换为无点形式(使用Ramda) 我这样做已经有一段时间了,但是R.divide函数把我甩了,因为分子和分母需要先求值 让xs=[5,5]; 让平均值=R.compose(R.apply(R.divide),R.juxt([R.sum,R.length]); log(平均值(xs)) 您可以尝试下面的方法 var _sum = function(xs) { return R.reduce(R.add, 0, xs); }; var _average =

如何将以下简单的
average
函数转换为无点形式(使用Ramda)


我这样做已经有一段时间了,但是
R.divide
函数把我甩了,因为分子和分母需要先求值

让xs=[5,5];
让平均值=R.compose(R.apply(R.divide),R.juxt([R.sum,R.length]);
log(平均值(xs))

您可以尝试下面的方法

var _sum = function(xs) {
  return R.reduce(R.add, 0, xs);
};

var _average = function(xs) {
  return R.divide(_sum(xs), xs.length);
};

console.log(_average([3,4,5,6]));
或者干脆

var _average = function(xs) {
  return R.divide(R.reduce(R.add, 0, xs), xs.length);
};

console.log(_average([3,4,5,6]));
使用:

使用(比
R.converge
更普遍适用的函数):


也许值得一读,谢谢你提出了一个关于可读性的重要观点。当然,记住“如果无点风格不容易写,可能也不容易阅读”是很好的。但是作为练习,如果你不得不回答这个问题,你会如何回答。我不知道,这看起来很头痛这就是为什么
无点
也称为
无点
?只是开个玩笑,但我觉得这确实很痛苦我花了一段时间才弄明白,但我觉得没那么糟。我只是不习惯。中缀符号也没有多大帮助。我觉得这是一个完美的无点解决方案。我提供的解决方案是基于OP编写的。使用
R.converge
/
R.lift
更干净,因为它不需要
R.apply
R.compose
。看我的答案。这些对我的头来说痛苦要小得多。我假设它们满足OP的要求,因为我不太熟悉
pointfree
?您的
\u sum
函数编写得更好
R.reduce(R.add,0)
–不需要包装函数。此外,您可以简单地使用。;)非常感谢davidchambers的反馈。我是在看过OP的帖子后才听说Ramda库和无点函数的。我只是试着抓住一些关于这些的想法来快速回答这篇文章,并获得了一些东西。我的回答基于我的快速理解。第二,在看了MinusFour的文章之后,我觉得我现在对Ramda库和无点函数有了更好的理解。我确实试过R.sum,但没有编辑帖子。:)。无论如何,再次感谢您的反馈。经过投票,这些都更加干净,甚至可以理解。即使在我看来,它们也毫无意义。干得好。:)我很惊讶像
R.average
这样的东西还不存在?但我越看它就越有意思。哦,是的,有一个R。平均,最简单和更干净的方法@Xotic750:赞成票。
var _average = function(xs) {
  return R.divide(R.reduce(R.add, 0, xs), xs.length);
};

console.log(_average([3,4,5,6]));
//    average :: Array Number -> Number
const average = R.converge(R.divide, [R.sum, R.length]);
//    average :: Array Number -> Number
const average = R.lift(R.divide)(R.sum, R.length);