如何将Scheme中的函数应用于另一个函数返回的参数列表?

时间:2011-07-17 08:02:37

标签: list function scheme call

假设有两个函数,f和v。进一步假设v返回一个长度为n的列表,f期望正好有n个参数。我在Scheme中寻找正确的语法,将f应用于v。

返回的列表

如果我使用语法(f (v v-arguments)),那么我得到一个错误,关于f期望n个参数但只接收一个参数(这是v返回的列表)。

如果我使用语法(f . (v v-arguments)),那么问题是传递给f的参数太多了。

我能做的最好(对于f期望两个参数的情况)是这样的:

(let ((output-of-v (v v-arguments)))
  (f (car output-of-v) (cadr output-of-v)))

我相信一定有更好的方法,我会感激任何建议!

1 个答案:

答案 0 :(得分:9)

看来你正在寻找apply

(apply f (v v-arguments))

正如here所解释的那样,apply函数将一个函数应用于一个参数列表,有效地将它们作为位置参数传递给该函数。