2015-04-02 64 views
0

#lang racket与foldr相似列表操作球拍

我需要从2所列出

创建一个列表
list1 => '(1 2 3) 
list2 => '(a b c) 

(define (create-list l1 l2) 
... 
) 

期望的结果是'((1 a) (2 b) (3 c))

必须使用foldr并且不能使用递归。

我正在考虑运行一个计数器和使用list-ref, 有没有更好的方法?

回答

3

球拍,在foldr高阶过程可能需要多个列表作为参数,你只需要制作一个lambda是处理它们的要求:

(define (create-list l1 l2) 
    (foldr (lambda (e1 e2 acc) 
      (cons (list e1 e2) acc)) 
     '() l1 l2)) 

例如:

(create-list '(1 2 3) '(a b c)) 
=> '((1 a) (2 b) (3 c)) 
+0

什么是“acc”? – 2015-04-02 21:56:12

+0

@LenaBru这只是一个名字。此参数用作累加器,响应正在构建中,最终在最后返回。 – 2015-04-02 23:11:16