3

对我提出问题的愚蠢方式感到抱歉,这里有一些解释:我正在用 javascript 中的 lambda-calculus 进行试验,但遇到了一些小困难。(你不必知道任何关于 lambda 演算的知识来帮助我)

我有这个功能(教堂数字 1 顺便说一句):

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”没有被替换。

非常感谢您的帮助!

别人

4

1 回答 1

1

你为什么不试试这个:

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

   return rv;

}

然后:

alert(num1);
alert(num1(num1).showBinding());
于 2012-09-13T18:52:26.937 回答