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

如何与时间解耦

流式程序

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

在这里插入图片描述

准备例子:

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

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

在这里插入图片描述

一个由1组成的无尽列表

(define ones (cons-stream 1 ones))

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

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

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

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

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

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

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

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

比如:

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

函数式编程。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值