如何将列表中的每一项应用为 Scheme 中函数的相应参数
How to apply each item of the list as the corresponding argument for a function in Scheme
我有一个列表 (1 2 3) 需要应用于函数 (f a b c)。
问题的第一部分是合并两个列表以创建上面的列表,现在我需要将这些数字作为参数插入。我不知道该怎么做。我正在考虑使用 apply 或 map,但我对它们的工作方式或它们是否是正确的方法没有信心。
谢谢。
您正在寻找的程序apply
:
(+ 1 2 3) ; ==> 6
(let ((lst '(1 2 3)))
(apply + lst)) ; ==> 6
Apply 还可以在列表之前采用其他参数.. 例如。
(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、an 应用于此列表的结果是什么:
(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) ...)
我有一个列表 (1 2 3) 需要应用于函数 (f a b c)。
问题的第一部分是合并两个列表以创建上面的列表,现在我需要将这些数字作为参数插入。我不知道该怎么做。我正在考虑使用 apply 或 map,但我对它们的工作方式或它们是否是正确的方法没有信心。
谢谢。
您正在寻找的程序apply
:
(+ 1 2 3) ; ==> 6
(let ((lst '(1 2 3)))
(apply + lst)) ; ==> 6
Apply 还可以在列表之前采用其他参数.. 例如。
(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、an 应用于此列表的结果是什么:
(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) ...)