Scheme 获取函数列表并将每个函数依次应用于参数列表时返回列表的函数?

Scheme 获取函数列表并将每个函数依次应用于参数列表时返回列表的函数?,scheme,Scheme,例如,给定 (lfmap '(f1 f2 f3) '(a1 a2 a3 a4)) 它应该返回类似于评估以下内容的内容 ( (f1(f2(f3(a1)))) (f1(f2(f3(a2)))) (f1(f2(f3(a3)))) (f1(f2(f3(a4)))) ) (define (lfmap lfunctions lvals) (define (_lfmap lfuncs val) (if (null? lfuncs) acum

例如,给定

(lfmap '(f1 f2 f3) '(a1 a2 a3 a4)) 
它应该返回类似于评估以下内容的内容

(
  (f1(f2(f3(a1))))
  (f1(f2(f3(a2))))
  (f1(f2(f3(a3))))
  (f1(f2(f3(a4))))
)
(define (lfmap lfunctions lvals)
    (define (_lfmap lfuncs val)
      (if (null? lfuncs) 
      acum 
      (_lfmap (cdr lfuncs) (apply (car lfuncs) val))))
  (map (lambda (x) (_lfmap lfunctions x)) lvals))
注意:以上可能不是有效的方案,但希望能传达我的意图。那么,正确的方法是什么?我尝试了以下方法

(
  (f1(f2(f3(a1))))
  (f1(f2(f3(a2))))
  (f1(f2(f3(a3))))
  (f1(f2(f3(a4))))
)
(define (lfmap lfunctions lvals)
    (define (_lfmap lfuncs val)
      (if (null? lfuncs) 
      acum 
      (_lfmap (cdr lfuncs) (apply (car lfuncs) val))))
  (map (lambda (x) (_lfmap lfunctions x)) lvals))

但它甚至不运行…

如果您只是将函数组合在一起而不是将它们放入列表中,则可以使用标准的
MAP
函数执行此操作:

(map (compose f1 f2 f3) (list a1 a2 a3 a4))
因此,您可以这样定义您的函数:

(define (lfmap lfunctions lvals)
   (map (apply compose lfunctions) lvals))

要定义
compose
函数,只需在函数列表上使用递归,将标识函数
(lambda(x)x)
作为基本情况的结果。

第一个列表包含符号,而不是函数。您需要编写
(列表f1 f2 f3)
什么是
acum
?如果
a1
a2
等被认为是变量,您需要使用
(列表a1 a2 a3 a4)
来获取它们的值。您确定要
(f3(a1))
而不是
(f3 a1)