在 Javascript 中,为什么我不能用 f(f) 替换 x => f(f)(x)?

弗洛里安 F

我试图在Java中实现Y组合器。

我设法实现了以下内容:

const y0 = gen => (f => f(f))( f => gen( x => f(f)(x) ) );
const factorial0 = y0( fact => n => n<=2 ? n : n * fact(n-1) );
console.log(factorial0(5));
// 120

它运作良好。

然后我正在考虑表达式x => f(f)(x)

我的理解是表达式x => g(x)等价于g. 将 any 应用yx => g(x)评估为g(y),同时应用yg也评估为g(y)

所以我换成x => f(f)(x)f(f)

const y = gen => (f => f(f))( f => gen( f(f) ) );
const factorial = y( fact => n => n<=2 ? n : n * fact(n-1) );
console.log(factorial(5));
// RangeError: Maximum call stack size exceeded

但是此版本因堆栈溢出而崩溃。

那么x => f(f)(x)之间有什么区别f(f)以便一个工作而另一个崩溃。

奥维迪乌·多哈

我认为正在发生的是这两个表达式并不完全相同。

一方面x => f(f)(x)- 这会创建一个新的函数文字(因此不会立即调用它 - 只有在调用此函数时才会调用它)

另一方面f(f)- 这在 Javascript 中是一个调用f函数的表达式因此,在您的情况下会导致堆栈溢出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我不能用 lambda 替换这个函数

来自分类Dev

为什么我不能用 jQuery 替换超链接内容?

来自分类Dev

如何在FF 34.x中获得FF 33.x Flexbox行为?

来自分类Dev

为什么在Haskell端口号中不能用相同值的变量替换值?

来自分类Dev

在此示例中,为什么不能用函数的返回值替换函数名?

来自分类Dev

为什么这个函数不能用来替换列表中的元素?

来自分类Dev

为什么不能用条件运算符(?:)替换if语句?

来自分类Dev

为什么R不能用给定值替换函数参数?

来自分类Dev

为什么不能用sed替换特定的字符串?

来自分类Dev

为什么我不能替换合并数据框中的值?

来自分类Dev

为什么不将'X'替换为空格

来自分类Dev

替换javascript中的括号

来自分类Dev

替换javascript中的变量

来自分类Dev

为什么我的JavaScript替换功能无法正常工作?

来自分类Dev

FF插件:如何在javascript中声明C函数fgets

来自分类Dev

如何修复FF和IE中的Javascript无效日期错误

来自分类Dev

为什么命令替换不能用大括号显示,而用实际数字替换可以用?

来自分类Dev

为什么我的字符串替换在JavaScript中不起作用?

来自分类Dev

在lapply中删除(替换(x))?

来自分类Dev

替换可以在html / javascript中替换的div

来自分类Dev

为什么不能用JavaScript函数覆盖此CSS?

来自分类Dev

在JavaScript模式的emacs中用f(x)替换function(x)

来自分类Dev

在JavaScript模式的emacs中用f(x)替换function(x)

来自分类Dev

为什么不能用包含return语句的方法替换return语句?

来自分类Dev

为什么我不能“覆盖” JavaScript中的方法?

来自分类Dev

我无法在javascript中替换此模式

来自分类Dev

替换javascript中的文本问题

来自分类Dev

无法替换JavaScript中的↵符号?

来自分类Dev

如何在JavaScript中替换$$

Related 相关文章

  1. 1

    为什么我不能用 lambda 替换这个函数

  2. 2

    为什么我不能用 jQuery 替换超链接内容?

  3. 3

    如何在FF 34.x中获得FF 33.x Flexbox行为?

  4. 4

    为什么在Haskell端口号中不能用相同值的变量替换值?

  5. 5

    在此示例中,为什么不能用函数的返回值替换函数名?

  6. 6

    为什么这个函数不能用来替换列表中的元素?

  7. 7

    为什么不能用条件运算符(?:)替换if语句?

  8. 8

    为什么R不能用给定值替换函数参数?

  9. 9

    为什么不能用sed替换特定的字符串?

  10. 10

    为什么我不能替换合并数据框中的值?

  11. 11

    为什么不将'X'替换为空格

  12. 12

    替换javascript中的括号

  13. 13

    替换javascript中的变量

  14. 14

    为什么我的JavaScript替换功能无法正常工作?

  15. 15

    FF插件:如何在javascript中声明C函数fgets

  16. 16

    如何修复FF和IE中的Javascript无效日期错误

  17. 17

    为什么命令替换不能用大括号显示,而用实际数字替换可以用?

  18. 18

    为什么我的字符串替换在JavaScript中不起作用?

  19. 19

    在lapply中删除(替换(x))?

  20. 20

    替换可以在html / javascript中替换的div

  21. 21

    为什么不能用JavaScript函数覆盖此CSS?

  22. 22

    在JavaScript模式的emacs中用f(x)替换function(x)

  23. 23

    在JavaScript模式的emacs中用f(x)替换function(x)

  24. 24

    为什么不能用包含return语句的方法替换return语句?

  25. 25

    为什么我不能“覆盖” JavaScript中的方法?

  26. 26

    我无法在javascript中替换此模式

  27. 27

    替换javascript中的文本问题

  28. 28

    无法替换JavaScript中的↵符号?

  29. 29

    如何在JavaScript中替换$$

热门标签

归档