MiniKanren loto
List of twins
(define loto
(lambda (l)
(conde
;; empty list
((nullo l) #s)
;; list of lists
((fresh (a)
;; The head of the list associates with a
(caro l a)
;; The head of the list is twins
(twinso a))
;; Then the result is if tail of is also lot
(fresh (as)
;; Associate as with tail of l
(cdro l as)
;; Ensure as is lot
(loto as))))))
Defined using listofo
(define loto
(lambda (l)
(listofo twinso l)))