2016-10-09 92 views
0

我有一个列表(1 2 3),我需要将其应用于函数(f a b c)。如何在列表中应用列表中的每个项目作为函数的相应参数

问题的第一部分是合并两个列表以创建上面的列表,现在我需要插入这些数字作为参数。我不知道如何做到这一点。我正在考虑使用应用程序或地图,但我对这些工作如何或者它们是否是正确的方法没有信心。

谢谢。

+0

是的,“应用”应该这样做。你试过了吗?它工作吗?请张贴你的尝试的代码。 – Bergi

+0

申请作品。由于列表是一个函数的结果,我不得不使用“let”来“保留”列表,然后应用工作。 – User9193

+0

你可以不这样做:'(apply proc(someproc args ...))'如果过程评估为一个列表,则工作。 – Sylwester

回答

1

您正在寻找的过程apply

(+ 1 2 3) ; ==> 6 

(let ((lst '(1 2 3))) 
    (apply + lst)) ; ==> 6 

应用还可以在列表之前采取额外的参数..例如。

(let ((lst '(1 2 3))) 
    (apply + 2 lst)) ; ==> 8, same as (+ 2 1 2 3) 

也知道Scheme中的+只是一个变量。它可能在你的let被绑定,以及:

(let ((lst '(1 2 3)) 
     (+ (lambda args (apply * args)))) 
    (apply + 2 lst)) ; ==> 12, same as (* 2 1 2 3) 

所以,想象一下你想要做在同一组数据的多个操作方法。例如。将x,y,z应用于此列表的结果是什么:

(let ((lst '(4 3 2)) 
     (procs (list + - * /))) 
    (map (lambda (proc) 
     (apply proc lst)) 
     procs)) 

; ==> (9 -1 24 2/3), same as (list (apply + lst) (apply - lst) ...) 
+0

非常感谢你们所有的例子,让它工作。 – User9193

相关问题