【发布时间】:2013-10-27 02:24:46
【问题描述】:
我有一个帮手来复制一个列表:
(define (list-copy list)
(if (null? list)
'()
(cons (car list) (list-copy (cdr list)))))
那么,
(define (multList lst1 lst2)
(define lstCopy2 (list-copy lst2))
(cond ((null? lst1) ())
((eq? (length lst1) (length lst2)) (cons (* (car lst1) (car lst2)) (multList (cdr lst1) (cdr lst2))))
((> (length lst1) (length lst2))
(if (null? lst2) lstCopy2
(cons (* (car lst1) (car lst2)) (multList (cdr lst1) (cdr lst2)))))
(else '())))
我正在尝试将 lst2 复制到 lstCopy2 中,然后我希望 lstCopy2 在我处理 lst2 时保持不变,以便像最初一样调用 lst2(在 lstCopy2 的帮助下)。 在我的第三个条件(当长度 lst1 > 长度 lst2)当 lst2 =()时,我想继续这个过程,直到 lst1 是()。
感谢您的帮助
【问题讨论】:
-
你有括号匹配的编辑器吗,如果有,打开它,如果没有。在单独的行中拖出括号很烦人。您应该依靠空格来显示代码结构,并使用括号匹配器来确保括号匹配空格。
-
此外,如果您在列表中重复出现并且每次都在该列表上调用 length,那么代码可能会更加复杂,因为当您 cdr 向下时,列表的长度应该变得明显。它还将一个时间与输入列表的大小成正比的好过程转换为一个时间与输入列表大小的平方成正比的过程。与向量不同,求链表的长度是线性时间过程,而不是一个常数时间。