继续我之前关于交集的帖子(如何从方案中的两个列表中获取对的交集?),我已经按照相同的思路编写了一个用于联合的小代码。输出应该类似于:(union '((1 2)(2 1)) '((1 3)(3 4))) -- '((1 5)(2 1)(3 4))。但是,我的程序的输出并不完全是我想要的。我认为我的递归或条件需要一些指导。请帮忙。谢谢。
(define union
(lambda (set1 set2)
(let ((newlist '()))
(cond ((null? set1) set2)
((null? set2) set1)
((eq? (caar set1) (caar set2))
(append newlist (cons (caar set1) (+ (cadr (car set1))(cadr (car set2))))))
(else
(if (> (caar set1) (caar set2))(append newlist (car set1)) (union (cdr set1) set2))
(union set1 (cdr set2)))))))