映射两个长度不均匀的列表 - 方案
Posted
技术标签:
【中文标题】映射两个长度不均匀的列表 - 方案【英文标题】:Mapping over two lists with uneven lengths - Scheme 【发布时间】:2021-11-12 08:20:57 【问题描述】:我正在实现一个过程“map2”,它接收两个列表并返回每个元素的总和。如果列表不均匀,则仅返回最短列表的总和。我的代码是:
(define (map2 proc items1 items2)
(if (null? items1)
'()
(cons (proc (car items1) (car items2))
(map2 proc (cdr items1) (cdr items2)))))
使用示例应该是:
(maps2 + '(1 2 3 4) '(3 4 5)) --> (4 6 8)
我的问题是如何实现处理不均匀列表的部分?
【问题讨论】:
【参考方案1】:您的解决方案几乎是正确的 - 您只需检查两个列表并在其中一个为空时停止。
(define (map2 proc items1 items2)
(if (or (null? items1) (null? items2))
'()
(cons (proc (car items1) (car items2))
(map2 proc (cdr items1) (cdr items2)))))
例子:
> (map2 + '(1 2 3 4) '(3 4 5))
'(4 6 8)
> (map2 * '(1 2) '(3 4 5))
'(3 8)
【讨论】:
以上是关于映射两个长度不均匀的列表 - 方案的主要内容,如果未能解决你的问题,请参考以下文章