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))))