如何实现JavaScript中的惰性求值功能?

2026-04-06 20:330阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计956个文字,预计阅读时间需要4分钟。

如何实现JavaScript中的惰性求值功能?

前言+在学习Haskell时,我遇到了这种写法:`sum (takeWhile (<=10000) (filter odd (map (^2) [1..])))`。这段代码的意义是,找出自然整数中小于10000的平方数和奇数的数字,并将这些数加总。

如何实现JavaScript中的惰性求值功能?

前言

在学习 Haskell 时,我遇到了这种写法:

sum (takeWhile (<10000) (filter odd (map (^2) [1..])))

这段代码的意思是,找出自然整数中小于 10000 的同时是乘方数和奇数的数字,再把这些数加总。由于 Haskell 的懒运算特性,上面的程序并不会立马生成从 1 到 无限大的自然数列表,而是会等待 takeWhile 指令,再生成符合条件的列表。如果用 JS 来写,很难写出这么简洁高表达性的代码。一个可能的思路就是写个 while 循环,然后找到符合条件的数进行加总。这个比较简单,我就不演示了。

但是如果我们要用高阶函数来模拟 Haskell 的写法,就要想个办法实现懒运算了。提到懒,首先想到的就是 Iterator 。没人踢它一脚告诉它 next(),它会一直坐那儿不动的。

现在我们就来用 Iterator 来实现一个懒运算。

阅读全文

本文共计956个文字,预计阅读时间需要4分钟。

如何实现JavaScript中的惰性求值功能?

前言+在学习Haskell时,我遇到了这种写法:`sum (takeWhile (<=10000) (filter odd (map (^2) [1..])))`。这段代码的意义是,找出自然整数中小于10000的平方数和奇数的数字,并将这些数加总。

如何实现JavaScript中的惰性求值功能?

前言

在学习 Haskell 时,我遇到了这种写法:

sum (takeWhile (<10000) (filter odd (map (^2) [1..])))

这段代码的意思是,找出自然整数中小于 10000 的同时是乘方数和奇数的数字,再把这些数加总。由于 Haskell 的懒运算特性,上面的程序并不会立马生成从 1 到 无限大的自然数列表,而是会等待 takeWhile 指令,再生成符合条件的列表。如果用 JS 来写,很难写出这么简洁高表达性的代码。一个可能的思路就是写个 while 循环,然后找到符合条件的数进行加总。这个比较简单,我就不演示了。

但是如果我们要用高阶函数来模拟 Haskell 的写法,就要想个办法实现懒运算了。提到懒,首先想到的就是 Iterator 。没人踢它一脚告诉它 next(),它会一直坐那儿不动的。

现在我们就来用 Iterator 来实现一个懒运算。

阅读全文