Scheme 中参数数量可变的流和过程

Streams and procedures with variable number of arguments in Scheme

我正在尝试创建一个流版本的地图,它将可变数量的流作为参数。我遇到的问题是我希望它处理各种大小的流,并且当其中一个流为空时它将终止。如果我处理的是列表而不是流,我会这样做:

if (member? '() args)
   '()

但是因为这每次都实现了整个流,我想它违背了目的?除了像这样检查其中一个流是否为空,我似乎想不出任何其他方法。

流版本和普通版本的主要区别在于你需要使用 stream-cons 等。你仍然可以使用流列表而不是列表列表,这样你的小支票就可以写成:

(if (memq stream-null args)
    stream-null
    (stream-cons <??> <??>))

不会实现流,因为args是一个流列表。因此,每个流都会被检查是否为空流,这是一个非常简单的 eq? 测试(所以我将其更改为 memq