expr: 100%

#lang racket/base

(require
  racket/contract)

(provide
  (contract-out
    [not-in-list (-> list? procedure?)]
    [list-diff (-> list? list? pair?)]))

(define (not-in-list lst)
   (v) (not (member v lst))))

(define (list-diff old new)
  (cons (filter (not-in-list old) new)
        (filter (not-in-list new) old)))

(module+ test
  (require rackunit)
  (define A '(1 2 3))
  (define B '(3 4 5))
  (define (check-pair pair expected-first expected-second)
    (check-equal? (car pair) expected-first)
    (check-equal? (cdr pair) expected-second))

  (check-pred (not-in-list A) 4)
  (check-false ((not-in-list A) 3))

  (check-pair (list-diff A A) '() '())
  (check-pair (list-diff A B) '(4 5) '(1 2))
  (check-pair (list-diff B A) '(1 2) '(4 5)))