MiniKanren pmembero

(define pmembero
  (lambda (x l)
    (conde
      ((nullo l) #u)
      ((eq-caro l x) (cdro l ()) ;; force evaluation of list tail to () 
                                 ;; rather than building a thunk,
                                 ;; as we do in member
                                 ;; This means that it prefers to give us the last member of list
      ((eq-caro l x) #s)
      (else
        (fresh (d)
          (cdro l d)
          (pmembero x d)))))))

Refined ver.

(define pmembero
  (lambda (x l)
    (conde
      ((nullo l) #u)
      ((eq-caro l x) (cdro l ()) ;; case where it is an empty list
      ((eq-caro l x)
       (fresh (a d)
         (cdro l (a . d)))) ;; Separate case where it is a non-empty list
       (else
         (fresh (d)
           (cdro l d)
           (pmembero x d)))))))