MiniKanren listofo

;; A list which satisfies a predicate (`predo`) relation
(define listofo
  (lambda (predo l)
    (conde
      ((nullo l) #s)
      ((fresh (a) ;; Question
         (caro l a) ;; Associate head of list to a
         (predo a)) ;; a should satisfy predo
       (fresh (d) ;; Answer
         (cdro l d) ;; Associate tail of list to d
         (listofo predo d))) ;; d should satisfy predo d
        (else #u))))