在Racket中使用foldr进行列表操作

时间:2015-04-02 19:45:42

标签: list functional-programming scheme racket fold

#lang racket

我需要从2个列表中创建一个列表

list1 => '(1 2 3)
list2 => '(a b c)

的理想结果
(define (create-list l1 l2)
...
)

'((1 a) (2 b) (3 c))

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

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

1 个答案:

答案 0 :(得分:3)

在Racket中,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))