地图

Scheme 中的 map 函数用于将过程应用于列表(或多个列表)的每个元素,并返回包含结果的新列表。这使其成为转换数据的理想选择。

map 最简单的形式如下所示:

(map procedure list)
  • 过程:应用于列表中每个元素的函数。
  • 列表:其元素将被转换的列表。

示例:将每个元素加倍

(define (double x)
  (* x 2))

(map double (list 1 2 3 4))
  • 此处,函数double 应用于列表(1 2 3 4) 的每个元素。
  • 结果是一个新列表,其中每个元素都加倍。

输出(2 4 6 8)


它是如何运作的

  1. 创建新列表

    • map 将提供的过程应用于列表的每个元素并将结果收集到新列表中。
  2. 转换数据

    • 它主要用于数据转换而不是执行副作用。

示例:与多个列表一起使用

如果提供了多个列表,map 会处理每个列表中的相应元素。

(define (sum x y)
  (+ x y))

(map sum (list 1 2 3) (list 4 5 6))
  • 函数sum 添加两个列表中的相应元素,并将结果作为新列表返回。

输出(5 7 9)


总结

  • map 函数是一个强大的工具,用于通过对每个元素应用过程来转换列表。
  • for-each 不同,map 生成一个新列表,其中包含应用该过程的结果。
  • 它支持多个列表,允许对它们进行元素级操作。

通过使用 map,您可以高效地创建数据的转换版本,同时保持原始列表不变。