MiniKanren memo
mem
(define mem
lambda (x l)
(cond
((null? l) #f)
((eq-car? l x) l)
(else (mem x (cdr l)))))
memo
(define memo
(lambda (x l out)
(conde
((nullo l) #u)
((eq-caro l x) (== l out))
(else
fresh (d)
(cdro l d)
(memo x d out)))))