我应该创建一个函数,它将两个列表作为参数,并返回一组对,它们组合了输入列表,其中对是给定索引处元素的组合。
示例输入:
(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的新手。感谢。
答案 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)))]))