假设我有以下功能:
(define foo
(lambda (n)
(values n (* 2 n))))
我想foo
在 list上调用 map '(1 2 3 4)
。因此,我创建了一个map-values
函数:
(define map-values
(lambda (f xs)
(match xs
['() (values '() '())]
[(cons x xs)
(let-values ([(a b) (f x)]
[(as bs) (map-values f xs)])
(values (cons a as) (cons b bs)))]
)))
现在,我可以执行以下操作:
(map-values foo '(1 2 3 4)) => (values '(1 2 3 4) '(2 4 6 8))
但是,如果foo
返回三个值,或者四个,......等等怎么办?我需要map-values
为每个案例创建一个新函数。有没有一种方法可以概括map-values
,以便可以与foo
返回多个值的任何方法一起使用?