函数返回值而不用给定参数替换变量

时间:2012-09-13 18:33:22

标签: javascript anonymous-function currying lambda-calculus

关于愚蠢的方式,我在这里提出了一些解释:我在javascript中尝试使用lambda-calculus,我遇到了一些小麻烦。 (你不必知道关于lambda-calculus的任何事情来帮助我)

我有这个功能(教堂数字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'不会被替换。

非常感谢你的帮助!

Someonelse

1 个答案:

答案 0 :(得分:1)

你为什么不试试这个:

function num1(c) {
   function rv(x){
    return c(x);
  }
   rv.showBinding = function() {
     return c;
   }

   return rv;

}

然后:

alert(num1);
alert(num1(num1).showBinding());