2

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

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

将不胜感激任何帮助,谢谢。

4

1 回答 1

0

这是可以做到的,但由于我的印象是这是一个家庭作业,我只给出一个提示。首先,引入一个 named-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)))))))

现在,填写...部分。请注意,您可以访问所有l1l2和。(你可能想在完成后进行一些重构,因为情况会非常相似。)lst1lst2

于 2012-10-30T21:24:39.583 回答