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

标签 javascript anonymous-function currying lambda-calculus

抱歉我表达问题的愚蠢方式,这里有一些解释:我正在 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/

相关文章:

php - 为什么要使用匿名函数?

javascript - 相似的 curry 函数产生不同的结果

functional-programming - 柯里化(Currying)的真实用例是什么?

function - OCaml:没有定义值的柯里化(Currying)

javascript - 如何将带有 javascript 的网页转换为纯 html?

JavaScript。像 SQL 一样连接 2 组对象的最佳方法?

javascript - 在 JS 中声明函数 : Named and Unamed expression

javascript - 为什么匿名函数在 Javascript 中对我不起作用?

javascript - 从 JavaScript 中的私有(private)方法访问成员变量

javascript - 如何控制 Tamper Monkey 仪表板安装的脚本,以便用户无法禁用脚本