Javascript功能组合/排序
我试图通过一个练习来理解Javascript中的组合和“排序”概念: Def。“合成”Javascript功能组合/排序,javascript,functional-programming,composition,sequencing,Javascript,Functional Programming,Composition,Sequencing,我试图通过一个练习来理解Javascript中的组合和“排序”概念: Def。“合成”compose(f,g)(x)=f(g(x)) Def。“排序”sequence(f,g)(x)=g(f(x))对于更多的argssequence(f,g)(…args)=g(f(…args)) 控制台显示: [f1] working on: 1 and 2 [f1] working on: 3 and undefined Result is NaN 似乎序列中的第二个函数无法访问args:我缺少了一些东西,
compose(f,g)(x)=f(g(x))
Def。“排序”sequence(f,g)(x)=g(f(x))
对于更多的argssequence(f,g)(…args)=g(f(…args))
控制台显示:
[f1] working on: 1 and 2
[f1] working on: 3 and undefined
Result is NaN
似乎序列中的第二个函数无法访问args:我缺少了一些东西,或者处理参数的方法不对?(序列函数适用于没有参数的函数)
这是
序列中的第二个函数似乎无法访问args
是的,这是正常的,也是意料之中的。根据你给的定义,
sequence(f1, f1, f2)(1, 2, 5);
相当于
f2(f1(f1(1, 2, 5)));
当然,无论是f2
还是外部f1
都不能访问传递给内部f1
的参数
序列中的第二个函数似乎无法访问args
是的,这是正常的,也是意料之中的。根据你给的定义,
sequence(f1, f1, f2)(1, 2, 5);
相当于
f2(f1(f1(1, 2, 5)));
当然,无论是
f2
还是外部f1
都不能访问传递给内部f1
函数的参数,它们只返回一个值。有两种方法可以通过多个返回值来扩充函数:
- 返回类似于tuple的数组
- 而不是返回连续调用
constpipek=g=>f=>x=>y=>k=>
k(g(x)(y)(f));
常数addk=x=>y=>k=>
(console.log(“将addk应用于”,x,y),k(x+y));
常量main=pipek(addk)
(地址)
(2)
(3)
(k=>k(4));//我们必须在继续中通过第四个参数
log(main(x=>x));//退出延续
函数只返回一个值。有两种方法可以通过多个返回值来扩充函数:
- 返回类似于tuple的数组
- 而不是返回连续调用
constpipek=g=>f=>x=>y=>k=>
k(g(x)(y)(f));
常数addk=x=>y=>k=>
(console.log(“将addk应用于”,x,y),k(x+y));
常量main=pipek(addk)
(地址)
(2)
(3)
(k=>k(4));//我们必须在继续中通过第四个参数
log(main(x=>x));//退出g(f(x))
中的延续
,g
不能(也不应该!)访问x
。一切正常,运行正常。在g(f(x))
中,g
不能(也不应该!)访问x
。一切正常,并按预期运行。谢谢,“返回类似于元组的数组”是某种解决方案。谢谢,“返回类似于元组的数组”是某种解决方案。谢谢,等价性很好地解释了为什么外部函数只能使用返回值。谢谢,等价性很好地解释了为什么外部函数只能使用返回值。