Welcome to the CHICKEN Scheme pasting service
magic5o not worko added by saeftl on Sat Jan 17 21:29:39 2015
(use mini-kanren) (use srfi-1) (define (distincto l) (conde ((nullo l)) ((fresh (h) (== l `(,h)))) ((fresh (h1 h2 t x) (conso h1 x l) (conso h2 t x) (=/= h1 h2) (distincto `(,h1 . ,t)) (distincto `(,h2 . ,t)))))) (define (notino x l) (conde ((nullo l)) ((fresh (h t) (conso h t l) (=/= h x) (notino x t))))) (define (test-not-in) (let ((sq3 (map build-num (iota 3 1)))) (run 3 (q) (fresh (a b c) (== q (list a b c)) (membero a sq3) (=/= a b ) (membero b sq3) (membero c sq3) (notino c (list a b))))) ) (define (=/= a b) (conde ((pairo a) (== b '())) ((pairo b) (== a '())) ((caro a 0) (caro b 1)) ((caro a 1) (caro b 0)) ((fresh (at bt) (cdro a at) (cdro b bt) (=/= at bt))))) (set! sum25 (let ((n 5)) (build-num (/ (* n (+ (* n n) 1)) 2)))) (set! sq25 (map build-num (iota 25 1))) (define blah (run 1 (q) (fresh (x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53 x54 x55) (== q (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53 x54 x55)) (membero x11 sq25) (=/= x12 x11) (membero x12 sq25) (membero x13 sq25) (notino x13 (list x11 x12)) (membero x14 sq25) (notino x14 (list x11 x12 x13)) (membero x15 sq25) (notino x15 (list x11 x12 x13 x14)) (membero x21 sq25) (notino x21 (list x11 x12 x13 x14 x15)) (membero x22 sq25) (notino x22 (list x11 x12 x13 x14 x15 x21)) (membero x23 sq25) (notino x23 (list x11 x12 x13 x14 x15 x21 x22)) (membero x24 sq25) (notino x24 (list x11 x12 x13 x14 x15 x21 x22 x23)) (membero x25 sq25) (notino x25 (list x11 x12 x13 x14 x15 x21 x22 x23 x24)) (membero x31 sq25) (notino x31 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25)) (membero x32 sq25) (notino x32 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31)) (membero x33 sq25) (notino x33 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32)) (membero x34 sq25) (notino x34 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33)) (membero x35 sq25) (notino x35 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34)) (membero x41 sq25) (notino x41 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35)) (membero x42 sq25) (notino x42 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41)) (membero x43 sq25) (notino x43 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42)) (membero x44 sq25) (notino x44 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43)) (membero x45 sq25) (notino x45 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44)) (membero x51 sq25) (notino x51 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45)) (membero x52 sq25) (notino x52 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51)) (membero x53 sq25) (notino x53 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52)) (membero x54 sq25) (notino x54 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53)) (membero x55 sq25) (notino x55 (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53 x54)) (trace-vars (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53 x54 x55)) ; (distincto (list x11 x12 x13 x14 x15 x21 x22 x23 x24 x25 x31 x32 x33 x34 x35 x41 x42 x43 x44 x45 x51 x52 x53 x54 x55)) (fresh (y) (addero x11 x12 x13 y) (addero y x14 x15 sum25)) (fresh (y) (addero x21 x22 x23 y) (addero y x24 x25 sum25)) (fresh (y) (addero x31 x32 x33 y) (addero y x34 x35 sum25)) (fresh (y) (addero x41 x42 x43 y) (addero y x44 x45 sum25)) (fresh (y) (addero x51 x52 x53 y) (addero y x54 x55 sum25)) (fresh (y) (addero x11 x21 x31 y) (addero y x41 x51 sum25)) (fresh (y) (addero x12 x22 x32 y) (addero y x42 x52 sum25)) (fresh (y) (addero x13 x23 x33 y) (addero y x43 x53 sum25)) (fresh (y) (addero x14 x24 x34 y) (addero y x44 x54 sum25)) (fresh (y) (addero x15 x25 x35 y) (addero y x45 x55 sum25)))))