没有元素的无限流

时间:2018-05-05 09:06:24

标签: stream scheme lisp racket infinite

我们刚刚学习了一门编程课程中的流程。除了这一项之外,我已经完成了本周分配的任务:定义一个没有元素的无限流。我已经浏览了SICP书的3.5章,但我仍然没有真正得到诀窍。一些提示将是非常棒的^^

1 个答案:

答案 0 :(得分:1)

答案取决于您使用的流的确切类型。

基本上有两种不同类型的流:

- empty streams
- streams consisting of an element followed by an stream

因此,您需要两种不同类型的值来表示这两种类型。

在sicp中,他们写了

  

有一个可区分的对象,即空流,不可以   任何cons-stream操作的结果,并且可以识别   谓词stream-null?

在Scheme中定义可区分(唯一)对象的一种方法是分配 一个新的cons单元 - 它的地址对于那个单元是唯一的。

(define the-empty-stream (list 'this-is-the-empty-stream))
(define (stream-null? x) (eq? x the-empty-stream))

在Racket中,只需使用结构来表示空流

(struct the-empty-stream ())
(define stream-null? the-empty-stream?)

stream->list等函数需要处理这两种类型的列表。

回到你的问题:如果你正在使用SICP流,答案很简单。 表达式the-empty-stream将为您提供一个空流。 如果您要定义自己的,则需要选择一种表示方式 一个空流 - 然后仔细修改你的所有流功能 必须处理空流。