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
)
我正在尝试创建一个流版本的地图,它将可变数量的流作为参数。我遇到的问题是我希望它处理各种大小的流,并且当其中一个流为空时它将终止。如果我处理的是列表而不是流,我会这样做:
if (member? '() args)
'()
但是因为这每次都实现了整个流,我想它违背了目的?除了像这样检查其中一个流是否为空,我似乎想不出任何其他方法。
流版本和普通版本的主要区别在于你需要使用 stream-cons
等。你仍然可以使用流列表而不是列表列表,这样你的小支票就可以写成:
(if (memq stream-null args)
stream-null
(stream-cons <??> <??>))
它不会实现流,因为args
是一个流列表。因此,每个流都会被检查是否为空流,这是一个非常简单的 eq?
测试(所以我将其更改为 memq
)