帮助创建Scheme map-许多功能

时间:2011-05-20 16:03:06

标签: scheme

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

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

+: 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))))

3 个答案:

答案 0 :(得分:2)

(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 :(得分:1)

您将错误的功能传递给map。不要传递((car fun-list) lst),而是尝试仅传递(car fun-list)

答案 2 :(得分:0)

你的措辞对我来说有点不清楚。你应该做以下事吗?有两个列表,一个是程序(让我们称之为列表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)))))))