我需要在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)))))
非常感谢您的帮助,谢谢。
答案 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)))))))
现在,填写...
部分。请注意,您可以访问所有l1
,l2
,lst1
和lst2
。 (你可能想在完成后稍微重构一下,因为案例非常相似。)