球拍:从2个列表创建递归列表

时间:2017-09-28 12:54:47

标签: recursion functional-programming scheme racket

我应该创建一个函数,它将两个列表作为参数,并返回一组对,它们组合了输入列表,其中对是给定索引处元素的组合。

示例输入:

(zipper '(1 2 3) '(4 9 5 7))

示例输出:

'((1 4) (2 9) (3 5)) 

如果一个输入列表比另一个输入列表长,则忽略较长列表的额外元素。实现必须是递归的。

我创建的代码:

(define (zipper list1 list2)
(if (or (empty? list1) (empty? list2))
  '()
(list (list (zipper (rest list1) (rest list2)) ))))

输出:

'((((((((()))))))))
'((((((()))))))
'()

有人可以帮忙吗?我也尝试使用'cons'将元素放在一起,所以我不确定元素是如何迷失的。我是Racket的新手。感谢。

1 个答案:

答案 0 :(得分:2)

非常简单,我们所要做的就是创建一个函数,如果列表为空,则返回空基作为基本情况,否则我们将(第一个list1,第一个list2)用于递归调用。

(define (zipper list1 list2)
  (cond [(or (empty? list1)
             (empty? list2)) empty]
        [else (cons 
               (cons (first list1)
                     (first list2)) ;; List of first elements
               (zipper (rest list1) (rest list2)))]))