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)
?