抱歉我表达问题的愚蠢方式,这里有一些解释:我正在 javascript 中试验 lambda-calculus,我遇到了一些小困难。 (你不需要知道任何关于 lambda 演算的知识来帮助我)
我有这个功能(教堂数字 1 btw):
function num1(c) {
return function(x){
return c(x);
}
}
alert(num1)
行为如预期并给出与上面完全相同的东西。
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;
}
然后:
alert(num1);
alert(num1(num1).showBinding());
关于javascript - 函数返回值而不用给定参数替换变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412596/