(use mini-kanren) (define distinct (lambda (x1 x2 x3 x4 x5 x6 x7 x8 x9) (let ((xs (list x1 x2 x3 x4 x5 x6 x7 x8 x9))) (all (membero (build-num 1) xs) (membero (build-num 2) xs) (membero (build-num 3) xs) (membero (build-num 4) xs) (membero (build-num 5) xs) (membero (build-num 6) xs) (membero (build-num 7) xs) (membero (build-num 8) xs) (membero (build-num 9) xs))))) (define sumo (lambda (x1 x2 x3) (fresh (s) (+o x1 x2 s) (+o x3 s (build-num 15))))) (print (run* (b) (fresh (x1 x2 x3 x4 x5 x6 x7 x8 x9) (alli (== b (list (list x1 x2 x3) (list x4 x5 x6) (list x7 x8 x9))) (distinct x1 x2 x3 x4 x5 x6 x7 x8 x9) (== x1 (build-num 8)) ;(== x2 (build-num 1)) ;(== x3 (build-num 6)) ;(== x4 (build-num 3)) ;(== x5 (build-num 5)) ;(== x6 (build-num 7)) ;(== x7 (build-num 4)) ;(== x8 (build-num 9)) ;(== x9 (build-num 2)) (sumo x1 x2 x3) (sumo x4 x5 x6) (sumo x7 x8 x9) (sumo x1 x4 x7) (sumo x2 x5 x8) (sumo x3 x6 x9) ))))