这个函数应该将两个用 l 表示的一元数列表相乘。由于乘法只是重复相加,因此我创建了一个添加列表的函数,并使用该函数循环它,直到它到达其中一个列表的末尾。
例如:
~ (um1 '(l l l) '(l l))
(l l l l l l) <--- 3 * 2 = 6
问题是它循环不正确。它增加了很多额外的数字。帮助?
;adds ls1 and ls2
(define (uadd ls1 ls2)
(if (null? ls1) ls2
(cons (car ls1) (uadd (cdr ls1) ls2))))
;multiplies ls1 and ls2
(define (um1 ls1 ls2)
(define (help ls1 ls2 i)
(if (<= i (length ls2))
(help (uadd ls1 ls1) ls2 (add1 i))
ls1))
(help ls1 ls2 0))
PS:不好意思问了这么多问题。我在计算机科学课上真的很挣扎。