【问题标题】:Help creating Scheme map-many function帮助创建 Scheme map-many 函数
【发布时间】:2011-05-20 16:03:06
【问题描述】:

我应该定义一个函数,该函数将一个函数列表和另一个列表作为参数,并返回一个通过将所有函数依次应用于列表元素而获得的值列表。

我想出了以下内容,但收到错误:

+: expects type <number> as 1st argument, given: (1 2 3); other arguments were: 1

当我尝试使用带有示例输入的函数时,(map-many (list (lambda (x) (+ x 1)) (lambda (x) (* x x))) '(1 2 3))。任何建议,将不胜感激。

(define (map-many fun-list lst)
    (if (null? lst) lst
        (map ((car fun-list) lst)
             (map-many (cdr fun-list) lst))))

【问题讨论】:

    标签: scheme


    【解决方案1】:
    (define (map-many fun-list lst)
      (if (null? fun-list) lst
          (map (car fun-list)
               (map-many (cdr fun-list) lst))))
    

    你的错误是:

    1. 您在 (null? lst) 而不是 (null? fun-list) 上完成递归。
    2. 函数的其余部分不合逻辑。

    【讨论】:

    • +1 (null? lst) vs (null? fun-list) 的好消息!
    【解决方案2】:

    您将错误的函数传递给map。不要传递((car fun-list) lst),而是只传递(car fun-list)

    【讨论】:

      【解决方案3】:

      你的措辞对我来说有点不清楚。您应该执行以下操作吗?有两个列表,一个是过程(我们称之为列表 P),另一个是值(我们称之为列表 V)。所以你正在寻找然后找到一个列表:

      • list-ref 0 = (P0 V0)
      • list-ref 1 = (P1 (P0 V1))
      • list-ref 2 = (P2 (P1 (P0 V2))

      等等?

      (define (map-many procs vals)
         (let ((applied (map (car procs) vals))
           (if (null? vals)
               vals
               (cons (car applied) (map-many (cdr procs) (cdr applied)))))))
      

      【讨论】:

      • 该函数应该像(map (apply compose fun-list) lst)一样工作。
      猜你喜欢
      • 2019-06-12
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多