我的问题涉及两个袋子的区别。一个包由包含一个值和该值的基数的对组成。我遇到的问题是检查这对是否有效,并且可以添加到最终列表中。例如,如果我运行以下命令:
(diff '((1 5) (2 2) (3 4) (4 8) (5 4)) '((2 3) (4 3) (6 2)))
正确答案应该是((1 5) (3 4) (4 5) (5 4))
但是我得到了((1 5) (2 -1) (3 4) (4 5) (5 4))
。关于如何检查负基数的任何想法。任何帮助,将不胜感激。
(define (diff bag1 bag2)
(cond
((null? bag1) '())
((null? bag2) '())
((eq? (car(car bag1)) (car(car bag2)))
(cons
(cons (car(car bag1))
(cons (- (car(cdr(car bag1))) (car(cdr(car bag2)))) '())) (diff (cdr bag1) (cdr bag2))))
(else
(cond
((member? (car(car bag1)) bag1) (cons (car bag1) (diff (cdr bag1) bag2)))))))
(define (member? x bag)
(cond
((null? bag) #f)
(else
(or(eq?(car(car bag)) x) (member? x (cdr bag))))))