MiniKanren membero

;; Goal is to see if x is member of l => succeed
(define membero
  (lambda (x l)
    (conde
      ;; x is not a member of an empty list
      ((nullo l) #u)
      ((eq-caro l x) #s)
      (else
        (fresh (d)
          (cdro l d)
          (membero x d))))))

Interesting properties

(run* (y)
  (membero y l)) ;; y is always == l