Как уже говорили другие, все, что вам нужно сделать, это создать отдельные функции для вычисления пересечения, объединения и вычитания двух множеств и вызова их из checkresult:
(define (checkresult a b)
(list (subtract a b)
(subtract b a)
(union a b)
(intersect a b)))
Вот несколько примеров функций объединения, пересечения и вычитания:
(define (element? x lst)
(cond ((null? lst) #f)
((eq? x (car lst)) #t)
(#t (element? x (cdr lst)))))
(define (union a b)
(cond ((null? b) a)
((element? (car b) a)
(union a (cdr b)))
(#t (union (cons (car b) a) (cdr b)))))
(define (intersect a b)
(if (null? a) '()
(let ((included (element? (car a) b)))
(if (null? (cdr a))
(if included a '())
(if included
(cons (car a) (intersect (cdr a) b))
(intersect (cdr a) b))))))
(define (subtract a b)
(cond ((null? a) '())
((element? (car a) b)
(subtract (cdr a) b))
(#t (cons (car a) (subtract (cdr a) b)))))
Примечание: поскольку это наборы и порядок не имеет значения, результаты не сортируются. Кроме того, функции предполагают, что входные данные являются наборами, и, следовательно, не выполняют никакой повторной проверки, кроме той, которая требуется для объединения.