如何将列表中的每个元素应用于方案中的函数?

时间:2017-03-16 17:18:58

标签: list scheme

函数applyToAll假设接受一个函数和一个List,然后取出列表的汽车并将每个元素应用到函数。

这是我到目前为止所做的工作:

(define applyToAll(lambda (f L)
                (cond
                  ((null? L)       '())
                  (#t              (cons (L) (applyToAll f(car L))))
                  )))

我不确定我做错了什么。功能调用看起来像

(applyToAll  (lambda (n) (* n n))    '(1 2 3) )  

它会返回

(1 4 9)

相反它返回:函数调用:期望一个函数在打开括号后但收到(list 1 2 3)

有关我的代码无法正常工作的任何帮助吗?

由于

1 个答案:

答案 0 :(得分:0)

听起来你正在尝试实施地图'。

你得到的错误是因为你正在调用一个列表,好像它是一个功能。     (L) ()这意味着方案中的功能调用 - scheme doc

你在这里犯了同样的错误:

 (#t              (cons (L) (applyToAll f(car L))))

正确的申请方式是:

(function arg0 arg1 ... argn)

您需要将f应用于列表中的每个元素。 这应该有效:

(cons(f(car L))(applyToAll f(cdr L))))

第一个elemnet:

(car L)

列表的其余部分:

(cdr L)

GL