【发布时间】:2009-02-18 01:56:46
【问题描述】:
map 的 Scheme 实现采用 N+1 个参数:一个包含 N 个参数的过程和 N 个列表。此外,当到达最短列表的末尾时,它会终止映射。
另一种方法是为每个列表提供一个默认值,如果结果比其他列表短,它将被视为每个列表的下一个元素。
这就是定义一个以参数为参数的过程流图:
N 个参数的过程
N 个元素的列表,这是第 N 个流的默认值
N 个流
Streem-map 生成一个流,其中第一个元素是应用于流的 (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 ...)
【问题讨论】: