Stream 无元素无限流

Stream 无元素无限流,stream,scheme,lisp,racket,infinite,sicp,Stream,Scheme,Lisp,Racket,Infinite,Sicp,我们刚刚在我的一门编程课程中学习了流。我已经完成了这周分配给我的任务,除了这个:定义一个没有元素的无限流。我已经浏览了SICP书的3.5章,但我仍然没有真正理解其中的诀窍。有些提示非常有用,答案取决于您使用的流的确切类型 基本上有两种不同类型的流: - empty streams - streams consisting of an element followed by an stream 因此,需要两种不同类型的值来表示这两种类型 在SICP()中,他们写道: 有一个可分辨的对象,空流,它

我们刚刚在我的一门编程课程中学习了流。我已经完成了这周分配给我的任务,除了这个:定义一个没有元素的无限流。我已经浏览了SICP书的3.5章,但我仍然没有真正理解其中的诀窍。有些提示非常有用,答案取决于您使用的流的确切类型

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

- empty streams
- streams consisting of an element followed by an stream
因此,需要两种不同类型的值来表示这两种类型

在SICP()中,他们写道:

有一个可分辨的对象,
空流
,它不能被识别 任何
cons 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来表示空流

(struct the-empty-stream ())
(define stream-null? the-empty-stream?)
诸如
stream->list
之类的函数需要处理这两种类型的列表

回到您的问题:如果您使用的是SICP流,答案很简单。 表达式
空流
将为您提供一个空流

如果您正在定义自己的,则需要选择一种表示方式 一个空的流-然后仔细修改您需要的所有流函数
也必须处理空流。

无限流没有元素意味着什么?那么它就不是无限的了。这也是我的直觉,但是作业中明确地说“定义一个没有元素的无限流”对老师来说是个不错的问题。