Javascript 函数返回值,而不使用给定参数替换变量
关于我用愚蠢的方式表达这个问题,这里有一些解释:我正在用javascript进行lambda演算的实验,我遇到了一些小困难。(你不必知道任何关于lambda微积分的知识来帮助我) 我有这个功能(顺便说一句,教堂数字1): 行为与预期一致,并给出与上述完全相同的结果Javascript 函数返回值,而不使用给定参数替换变量,javascript,anonymous-function,currying,lambda-calculus,Javascript,Anonymous Function,Currying,Lambda Calculus,关于我用愚蠢的方式表达这个问题,这里有一些解释:我正在用javascript进行lambda演算的实验,我遇到了一些小困难。(你不必知道任何关于lambda微积分的知识来帮助我) 我有这个功能(顺便说一句,教堂数字1): 行为与预期一致,并给出与上述完全相同的结果 alert(num1(num1)) 表现出人意料,并给出: function (x) { return c(x); } 为什么javascript不能用函数num1替换“c”?但是 alert(num1(num1)(num
alert(num1(num1))
表现出人意料,并给出:
function (x) {
return c(x);
}
为什么javascript不能用函数num1替换“c”?但是
alert(num1(num1)(num1))
给出:
function (x) {
return c(x);
}
显示了第一个c实际上被函数替换了,就像它应该的那样。
如果“c”不被替换,则会发生以下情况:
(num1(num1)(num1))=
(function (x) {return c(x);}(num1=
c(function num1(c) {
return function(x){
return c(x);
}
})
总之,代码正在做它应该做的事情,但是它没有输出替换了“c”的函数。我能做什么?稍后,我将介绍更多函数,然后我将无法区分num1(asd)
和num1(jkl)
,因为“c”不会被替换
非常感谢你的帮助
有人问你为什么不试试这个:
function num1(c) {
function rv(x){
return c(x);
}
rv.showBinding = function() {
return c;
}
return rv;
}
然后:
看起来你正在努力掌握Y组合运算,我知道Y组合运算及其工作原理(但不知道为什么),我可以在纸上使用它。我还不知道我到底想用js做什么,但这个例子只是对我的实际问题的简化:S-和K-组合子有着同样愚蠢的行为。它会告诉你如何在你的问题中格式化代码。你的意思是记录函数会显示“错误”的源代码吗?这是意料之中的——JavaScript不会更改您的源代码。事实上,源代码并没有定义执行的行为。@someonelse:或者,您可以使用调试器。在
返回c(x)上放置断点代码>行,执行num1(num1)
并计算c
,以查看c
指的是num1
。
function num1(c) {
function rv(x){
return c(x);
}
rv.showBinding = function() {
return c;
}
return rv;
}
alert(num1);
alert(num1(num1).showBinding());