Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 球拍中地图值的推广_Scheme_Racket_Functor_Multiple Return Values - Fatal编程技术网

Scheme 球拍中地图值的推广

Scheme 球拍中地图值的推广,scheme,racket,functor,multiple-return-values,Scheme,Racket,Functor,Multiple Return Values,假设我有以下函数: (define foo (lambda (n) (values n (* 2 n)))) (define map-values (lambda (f xs) (match xs ['() (values '() '())] [(cons x xs) (let-values ([(a b) (f x)] [(as bs) (map-values f xs)])

假设我有以下函数:

(define foo
  (lambda (n)
    (values n (* 2 n))))
(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
foo
(1234)。因此,我创建了一个映射值的
函数:

(define foo
  (lambda (n)
    (values n (* 2 n))))
(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
返回三个值,或者四个。。。等我需要为每种情况创建一个新的
映射值
函数。有没有一种方法可以通用化
映射值
,以便Is可以处理任何返回多个值的
foo

(定义(映射值过程lst)
(定义(环绕e)
(使用值调用(lambda()(proc e))列表)
(应用值)
(应用地图列表(地图换行列表)))
(定义(foo n)
(数值n(*2N)(/1N)))
(映射值foo'(1 2 3 4))
; ==> (1 2 3 4)
; ==> (2 4 6 8)
; ==> (1 1/2 1/3 1/4)
这也与标准方案兼容