我应该定义一个函数,它将函数列表和另一个列表作为参数,并返回通过按顺序将所有函数应用于列表元素而获得的值列表。
我想出了以下内容,但收到了错误:
+: 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))))
答案 0 :(得分:2)
(define (map-many fun-list lst)
(if (null? fun-list) lst
(map (car fun-list)
(map-many (cdr fun-list) lst))))
您的错误是:
(null? lst)
而不是(null? fun-list)
上完成了递归。答案 1 :(得分:1)
您将错误的功能传递给map
。不要传递((car fun-list) lst)
,而是尝试仅传递(car fun-list)
。
答案 2 :(得分:0)
你的措辞对我来说有点不清楚。你应该做以下事吗?有两个列表,一个是程序(让我们称之为列表P),另一个是值(让我们称之为列表V)。所以你希望找到一个列表:
等等?
(define (map-many procs vals)
(let ((applied (map (car procs) vals))
(if (null? vals)
vals
(cons (car applied) (map-many (cdr procs) (cdr applied)))))))