Scheme - 故障返回列表列表

时间:2015-03-23 20:33:27

标签: list scheme nested-lists

这个函数应该有3个列表,并返回一个列表列表,其中每个输出的子列表包含输入列表的3个开始元素。

因此该函数将返回一个列表((1 2 10)(3 4 20)(9 8 30))。

我无法按照我想要的方式进行格式化。关于如何解决这个问题的任何想法?

enter code here

1 个答案:

答案 0 :(得分:1)

让我们举几个例子:

; (zip3 '()  '()  '())          == ()                   
; (zip3 '(9) '(8) '(30))        == ((9 8 30))
; (zip3 '(3 9) '(4 8) '(20 30)) == ((3 4 20) (9 8 30)) 
                                == (cons '(3 4 20) (zip3 '(9) '(8) '(30))

这激发了以下内容:

(define (zip3 xs ys zs)
  (cond
    [(null? xs)  '()]
    [else        (let ([x   (car xs)] [y   (car ys)] [z   (car zs)]
                       [xs* (cdr xs)] [ys* (cdr ys)] [zs* (cdr zs)])
                   (cons (list x y z) (zip3 xs* ys* zs*)))]))

(zip3 '(1 3 9) '(2 4 8) '(10 20 30))