0
我有一个列表(1 2 3),我需要将其应用于函数(f a b c)。如何在列表中应用列表中的每个项目作为函数的相应参数
问题的第一部分是合并两个列表以创建上面的列表,现在我需要插入这些数字作为参数。我不知道如何做到这一点。我正在考虑使用应用程序或地图,但我对这些工作如何或者它们是否是正确的方法没有信心。
谢谢。
我有一个列表(1 2 3),我需要将其应用于函数(f a b c)。如何在列表中应用列表中的每个项目作为函数的相应参数
问题的第一部分是合并两个列表以创建上面的列表,现在我需要插入这些数字作为参数。我不知道如何做到这一点。我正在考虑使用应用程序或地图,但我对这些工作如何或者它们是否是正确的方法没有信心。
谢谢。
您正在寻找的过程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) ...)
非常感谢你们所有的例子,让它工作。 – User9193
是的,“应用”应该这样做。你试过了吗?它工作吗?请张贴你的尝试的代码。 – Bergi
申请作品。由于列表是一个函数的结果,我不得不使用“let”来“保留”列表,然后应用工作。 – User9193
你可以不这样做:'(apply proc(someproc args ...))'如果过程评估为一个列表,则工作。 – Sylwester