我被HTDP 的练习 17.1.2 的问题困住了。这是我到目前为止所得到的:
(define (cross alist1 alist2)
(cond
[(empty? alist1) empty]
[else (append (list (first alist1)(first alist2))
(cons (first alist1)(list (first (rest alist2))))
(cross (rest alist1) alist2))]))
(cross '(a b c) '(1 2))
;correctly outputs (list 'a 1 'a 2 'b 1 'b 2 'c 1 'c 2)
这适用于测试用例,但是当第二个列表有超过 2 个元素时,函数就会崩溃。
(cross '(a b c) '(1 2 3))
;outputs (list 'a 1 'a 2 'b 1 'b 2 'c 1 'c 2)
问题似乎是追加后的第二行,因为它只从第二个列表中最多包含两个元素。我应该如何解决这个问题?感谢您的任何见解。:)