Functional programming 嵌套函数组合
我无法理解以下函数组合:Functional programming 嵌套函数组合,functional-programming,lambda-calculus,Functional Programming,Lambda Calculus,我无法理解以下函数组合: function plus_one(x) { return x + 1; } function trans(f) { return function(x) { return 2 * f(2 * x); }; } function twice(f) { return function(x) { return f(f(x)); } } 当我试图计算((两次)(trans))(加上一次)(1) 这就
function plus_one(x) {
return x + 1;
}
function trans(f) {
return function(x) {
return 2 * f(2 * x);
};
}
function twice(f) {
return function(x) {
return f(f(x));
}
}
当我试图计算((两次)(trans))(加上一次)(1)
这就是我得到的,假设加1
是f
f(2f(2x))=2f(2*2f(2x))=2f(4f(2x))=2*(4*(2+1))=24。
但将其输入到“勇敢者”中会发现它是20
非常感谢您的帮助
非常感谢advanced.((两次)(trans))(加一)
是trans(trans(加一))
,并且
trans(trans(plus_one)) (1)
—> trans(λx.2 * plus_one(2*x)) (1)
—> λy.2 * ((λx.2 * plus_one(2*x))(2*y) (1)
—> 2 * (λx.2 * plus_one(2*x)) (2*1)
-> 2 * 2 * plus_one(2*2)
-> 2 * 2 * 5
-> 20
((两次)(trans))(加一)
是trans(trans(加一))
,并且
trans(trans(plus_one)) (1)
—> trans(λx.2 * plus_one(2*x)) (1)
—> λy.2 * ((λx.2 * plus_one(2*x))(2*y) (1)
—> 2 * (λx.2 * plus_one(2*x)) (2*1)
-> 2 * 2 * plus_one(2*2)
-> 2 * 2 * 5
-> 20
在不同的函数中使用不同的参数名可能有助于避免混淆它们
f
并不总是指加上一个
与
我们可以评估
twice(trans)(plus_one)(1)
作为
在不同的函数中使用不同的参数名可能有助于避免混淆它们
f
并不总是指加上一个
与
我们可以评估
twice(trans)(plus_one)(1)
作为
为什么使用
lambda演算
标记?为什么使用lambda演算
标记?