I have a list (1 2 3) that I need to apply to the function (f a b c).
The first part of the problem was merging two lists to create the list above, now I need to plug in those numbers as arguments. I am not sure how to do this. I was thinking about using apply or map, but I am not confident in how those work or if they would be the right method.
Thank you.
You are looking for the procedure apply
:
(+ 1 2 3) ; ==> 6
(let ((lst '(1 2 3)))
(apply + lst)) ; ==> 6
Apply can also take additional arguments before the list.. eg.
(let ((lst '(1 2 3)))
(apply + 2 lst)) ; ==> 8, same as (+ 2 1 2 3)
Also know that +
in Scheme is just a variable. It could have been bound in your let
as well:
(let ((lst '(1 2 3))
(+ (lambda args (apply * args))))
(apply + 2 lst)) ; ==> 12, same as (* 2 1 2 3)
So imagine you want to do multiple operations on the same set of data.. eg. what is the result of applying x,y,an z to this list:
(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) ...)