当前位置: 代码迷 >> 综合 >> 函数式编程学习-SICP-LISP-流STREAM的实现-流编程思路和惰性/延时求值2
  详细解决方案

函数式编程学习-SICP-LISP-流STREAM的实现-流编程思路和惰性/延时求值2

热度:64   发布时间:2024-03-06 09:34:19.0

如何与时间解耦

流式程序

看待流的方法:即一下子处理了整个流。

在这里插入图片描述

准备例子:

第一个例子:将两个流相加。
在这里插入图片描述

第二个例子:运用到流上的所有项目

在这里插入图片描述

一个由1组成的无尽列表

(define ones (cons-stream 1 ones))

如何定义整数:
在这里插入图片描述

定义斐波那契数列
在这里插入图片描述

何做到不要显式定义很多delay?
让整个底层都延时。让delay自动内建在语言之中。

这种语言叫做“正则序求值”(normal order)语言。而我们一直用的语言叫做application-order语言。即先求参数,再求值。而前者把整个参数放到函数中。

如果这样做了,cons也会自动变成cons-stream。有人这样做了。

但是,如果我们放弃了对时间的控制,虽然代码优雅,但是表达力下降。

比如,迭代函数会一直迭代下去。这是一个缺点。

正则序和副作用直接不能良好配合。不能建模具有局部状态的变量,又用正则序的方法解耦时间。
(据说haskell中的monad可以解决这个问题?)

比如:

在正则序的环境里:
在这里插入图片描述
在这里插入图片描述
如何处理这个问题?——放弃局部状态这件事

函数式编程。

  相关解决方案