映射两个长度不均匀的列表 - 方案

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)

【讨论】:

以上是关于映射两个长度不均匀的列表 - 方案的主要内容,如果未能解决你的问题,请参考以下文章

创建两个不均匀子问题的分治算法的时间复杂度。

将同一张表映射到两个不同的列表

什么是均匀分布

错误提供程序没有均匀闪烁

计算两个矩形列表的重叠

如何找到一个numpy数组的多个均匀分布的方法?