Recursion Racket:从2个列表递归创建列表

Recursion Racket:从2个列表递归创建列表,recursion,functional-programming,scheme,racket,Recursion,Functional Programming,Scheme,Racket,我应该创建一个函数,该函数将两个列表作为参数,并通过组合输入列表返回一个对列表,其中对是给定索引处元素的组合 输入示例: (zipper '(1 2 3) '(4 9 5 7)) '((1 4) (2 9) (3 5)) 示例输出: (zipper '(1 2 3) '(4 9 5 7)) '((1 4) (2 9) (3 5)) 如果一个输入列表比另一个长,则忽略较长列表中的额外元素。实现必须是递归的 我创建的代码: (define (zipper list1 list2) (if

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

输入示例:

(zipper '(1 2 3) '(4 9 5 7))
'((1 4) (2 9) (3 5)) 
示例输出:

(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”将元素组合在一起,因此不确定元素是如何丢失的。我是个新手。谢谢。

非常简单,我们所要做的就是创建一个函数,如果其中一个列表为空,它将返回空作为基本情况,否则我们将把(第一个列表1,第一个列表2)转换为递归调用

(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)))]))

在测试用例中,这是从哪里来的?提供更多的测试用例。我确信我能做到,但不能用给定的信息(什么是一对列表?这不是你的输出所说明的。你是指一对列表?)你绝对正确。我将错误的测试用例复制到我的帖子中。编辑好了,说得好。谢谢你的帮助,我真的很感激。使用您发布的代码,我得到了(1.a)等的输出,因此我将else块中的第二个“cons”命令调整为“list”,并将其修复。@BrianJay也
(map list list1 list2)
。srfi-1
map
在最短列表处停止。