方案:按索引添加2个列表

时间:2012-10-30 21:06:43

标签: list recursion scheme

我需要在Scheme(Racket)中编写一个函数,它不需要两个相等的函数 length列出并返回一个列表,其中每个元素是相同元素的总和 两个列表中的索引。如果列表的长度不相等,则较短的列表应该附加到自身,直到它达到较长的列表的大小。例如:

=> (addLists '(1 2 3 4) '(1 2))
(2 4 4 6)

=> (addLists '(1 2 3 4) '(1 2 3 4 5))
(2 4 6 8 6)

到目前为止,我能够编写一个函数来完成相同长度列表,但问题在于如何在此函数中增加较短列表的长度(或者使用获取列表的辅助函数和大小并正确扩展它。)

(define (sumListPairs lst1 lst2)
    (if (null? lst1) null
        (cons (+ (car lst1) (car lst2))
        (sumListPairs (cdr lst1) (cdr lst2)))))

非常感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

这可以做到,但由于我的印象是这是一项家庭作业,我只会给出一个提示。首先,引入一个名为 - let来进行实际的递归。然后,将递归中的个案数量从两个扩展到四个。

(define (sumListPairs lst1 lst2)
  (let loop ((l1 lst1) (l2 lst2))
    (cond ((and (null? l1) (null? l2)) null)
          ((null? l1) ...)
          ((null? l2) ...)
          (else (cons (+ (car lst1) (car lst2))
                      (loop (cdr l1) (cdr l2)))))))

现在,填写...部分。请注意,您可以访问所有l1l2lst1lst2。 (你可能想在完成后稍微重构一下,因为案例非常相似。)