如何用Ramda编写一个组合函数?

时间:2018-06-17 06:27:57

标签: javascript functional-programming ramda.js

如何修改zComposedFn函数以使z和zComposedOutput的输出相同?



const R = require('ramda');

let f1 = R.curry((p1, p2, p3) => {
    let result = {
        n1: p1,
        n2: p2,
        n3: p3
    };
    return result;
}
);

let x = f1(1, 2, 3);
let y = f1(1, 2, x);
let z = f1(1, x , y);

console.log(z);

let zComposedFn = R.compose(f1);

let input = [1,2,3];
let zComposedOutput = zComposedFn(...input);

console.log(zComposedOutput);




目标是创建一些具有相同签名和输出类型但实现不同的度量计算函数。

const MetricFn = (m,f,a) => {<to be implemented using switch case on m> return b}

m : name of metric as string
f : Array of functions utilizing  input data objects
a : input data object

示例:

有一个财务仪表板,它接收输入数据为(1,2,3)。仪表板显示metric1,metric2和metric3,计算如下:

metric1 = MetricFn('metric1',[f1])(1,2,3);
metric2 = MetricFn('metric2',[f1, f2])(1,2,3);
metric3 = MetricFn('metric3',[f1, f2, f3])(1,2,3);

我想知道如何创建MetricFn的结构。

1 个答案:

答案 0 :(得分:1)

我的功能很少有意义。而且我没有看到Ramda提供的任何帮助。虽然我是Ramda的作者,但我并不总是记得所有的功能,但似乎不太可能。

您的要求看起来有点像chain使用chain(f, g) ~~> x => f(g(x))(x)的函数。但它只是一个模糊的联系,我无法看到如何使用连锁来做你想做的事。

您是否有潜在的问题需要解决,我们可以提供帮助?

这是一个简单的实现,但它主要是在没有中间变量的情况下重新编写代码:

const foo = curry((f, a, b, c) => f(a, f(a, b, c), f(a, b, f(a, b, c))))
foo(f1)(1, 2, 3)