MiniKanren lolo
(define lolo
(lambda (l)
(conde
((nullo l) #s) ;; Associate l with null
((fresh (a)
(caro l a) ;; Head of list should be a list
(listo a))
(fresh (d) ;; Tail of list should be a list of lists
(cdro l d)
(lolo d))) ;; Only when both succeed this goal succeeds
(else #u))))