题
假设我有一个程序foo进行了三个论点,并将其返回的所有列表都翻了一番:
(define (foo a b c)
(list (* 2 a ) (* 2 b) (* 2 c)))
我想做的是创建另一个接受列表的过程,并使用列表元素作为参数调用foo,例如:
(define (fooInterface myList)
...)
(fooInterface (list 1 2 3))
捕获是,我不想编写foo Interface,假设Foo总是有3个参数。也就是说,如果我向foo添加一个额外的参数,则foo Interface仍应工作,前提是传递的列表具有3个元素。
解决方案
您要寻找的是 apply
.
其他提示
地图如何处理不同的过程定义?
(define foo2
(lambda (x)
(* x 2)))
(map foo2 '(1 2 3 4 5))
一些实现您想做的事...
(define (foo lst)
(map (lambda (x) (* 2 x)) lst))
(define (foo lst)
(apply (lambda args (map (lambda (x) (* x 2)) args)) lst))
(define foo
(lambda args (map (lambda (x) (* x 2)) args))
只是为了娱乐,真的很酷 apply
正在转置矩阵。考虑:
(define grid '((1 2 3)
(4 5 6)
(7 8 9)
))
然后,
(apply map list grid)
=> '((1 4 7)
(2 5 8)
(3 6 9))
不隶属于 StackOverflow