2017-05-09 20 views
0

给出一个列表的列表作为输入的过程,我想执行的程序,使得最终的结果将是:套用以前的结果

(define (thing . lists) ; list of lists (l1 l2 ... lN) 
    ;returns ...f(f(f(l1 l2) l3) lN)... 
) 

因此,例如:

(thing '(a b) '(c d) '(e f)) 

。 ..would导致f(f((a b) (c d)) (e f))

我有折叠,λ,应用和地图战斗,但我无法找出正确的方式。

+0

你能提供'的F()的例子'你想申请? –

回答

1

假设输入具有至少两个列表和f以前定义:

(define (thing . lists) 
    (foldr (lambda (lst acc) 
      (f acc lst)) 
     (f (car lists) (cadr lists)) 
     (cddr lists))) 

例如:

(define f append) 
(thing '(a b) '(c d) '(e f)) 
=> '(a b c d e f)