map 的 Scheme 实现采用 N+1 个参数:一个包含 N 个参数的过程和 N 个列表。此外,当到达最短列表的末尾时,它会终止映射。
另一种方法是为每个列表提供一个默认值,如果结果比其他列表短,它将被视为每个列表的下一个元素。
那就是定义一个过程 streem-map 作为它的参数: N 个
参数的过程
N 个元素的列表,这是第 N 个流
N个流的默认值
流映射生成一个流,其中第一个元素是应用于流的 (N) 个第一个元素的过程,第二个元素是应用于流的第二个元素的相同过程,依此类推。如果第 N 个流变空,则 streem-map 使用第 N 个默认元素。因此,由 streem-map 产生的流永远是无限长的;如果所有 N 个输入流的长度都是有限的,最终它将生成由应用于 N 个默认值的过程组成的列表。
例如:
(streem-map (lambda (x y z) (* x y z))
‘(0 1 2)
(list->streem ‘(1 2 3))
(list->streem ‘(9 9))
(list->streem ‘(4))
将生成包含以下内容的无限流:'(36 36 6 0 0 0 ...)