list - 在方案中定义 map 以获取多个列表

标签 list dictionary arguments scheme

我正在为 scheme in scheme 创建一个求值器,我希望它具有的功能之一是 map 。但是,我发现的所有 map 定义都不允许有多个列表。 例如:

(define (my-map proc lis)
   (cond ((null? lis)
          '())
         ((pair? lis)
          (cons (proc (car lis))
                (my-map proc (cdr lis))))))

这个 map 的定义是“不完整的”,因为,例如,你不能像这样添加 2 个数字列表(它只允许一个列表作为参数):

(my-map + '(1 2 3) '(4 5 6))

如何修改上面的 map 定义以允许任意数量的列表?

最佳答案

您可以根据仅适用于一个列表的one-map过程定义适用于多个列表的multi-map过程(这就是您的my-map 程序是这样做的,虽然第二个条件有点不寻常)。

假设所有列表的长度都相同,并且至少一个列表作为参数传递给multi-map:

(define (one-map proc lst)
  (if (null? lst)
      '()
      (cons (proc (car lst))
            (one-map proc (cdr lst)))))

(define (multi-map proc . lst)
  (if (null? (car lst))
      '()
      (cons (apply proc (one-map car lst))
            (apply multi-map proc (one-map cdr lst)))))

例如:

(multi-map + '(1 2 3) '(4 5 6) '(7 8 9))
=> '(12 15 18)

关于list - 在方案中定义 map 以获取多个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635639/

相关文章:

python - 获取包含子字符串的第一个列表索引?

r - R 中的抓取列表

python - 如何将列表列表中的值分配给键以在python中创建字典

python - 一键创建字典列表列表

python - 语法错误 : non-keyword arg after keyword arg in arguments function

linux - pthread 中的参数传递错误

python - 如何从字典中的列表中的字典中获取键和值

list - 如何使用列表理解在 Haskell 中创建这样的列表

python - 仅当字符串匹配时才在 python 中连接字符串

php - 将参数传递给函数 - php