如何实现JavaScript惰性求值的示例代码?

更新于
2026-09-30 23:04:53
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何实现JavaScript惰性求值的示例代码?

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

解释:

1.`map (^2) [1..]`:将1到无穷大的整数列表中的每个元素平方。

2.`filter odd`:从上一步的结果中筛选出奇数。

3.`takeWhile (<=10000)`:从上一步的结果中取出小于等于10000的部分。

4.`sum`:将上一步的结果中的所有数字相加。

前言

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

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

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

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

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

阅读全文

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

如何实现JavaScript惰性求值的示例代码?

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

解释:

1.`map (^2) [1..]`:将1到无穷大的整数列表中的每个元素平方。

2.`filter odd`:从上一步的结果中筛选出奇数。

3.`takeWhile (<=10000)`:从上一步的结果中取出小于等于10000的部分。

4.`sum`:将上一步的结果中的所有数字相加。

前言

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

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

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

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

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

阅读全文