Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Finds all (a, b, c) with a, b, c in [1..10], a <= b, a^2 + b^2 = c^2. Result: ((3 4 5) (6 8 10)) — the two smallest Pythagorean triples within the domain. Demonstrates the enumerate-then-filter pattern: (ino a dom) (ino b dom) (ino c dom) — generate (lteo-i a b) — symmetry break (*o-i a a a-sq) (*o-i b b b-sq) (*o-i c c c-sq) — squares (pluso-i a-sq b-sq sum) (== sum c-sq) — Pythagorean equation 288/288 cumulative.
37 lines
838 B
Plaintext
37 lines
838 B
Plaintext
;; lib/minikanren/tests/pythag.sx — Pythagorean triple search.
|
|
;;
|
|
;; Uses ino + intarith goals to find triples (a, b, c) with
|
|
;; a, b, c ∈ [1..N], a ≤ b, a² + b² = c². With intarith escapes
|
|
;; the search runs at host-arithmetic speed.
|
|
|
|
(define
|
|
digits-1-10
|
|
(list
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10))
|
|
|
|
(mk-test
|
|
"pythag-triples-1-to-10"
|
|
(let
|
|
((triples (run* q (fresh (a b c a-sq b-sq sum c-sq) (ino a digits-1-10) (ino b digits-1-10) (ino c digits-1-10) (lteo-i a b) (*o-i a a a-sq) (*o-i b b b-sq) (*o-i c c c-sq) (pluso-i a-sq b-sq sum) (== sum c-sq) (== q (list a b c))))))
|
|
(and
|
|
(= (len triples) 2)
|
|
(and
|
|
(some
|
|
(fn (t) (= t (list 3 4 5)))
|
|
triples)
|
|
(some
|
|
(fn (t) (= t (list 6 8 10)))
|
|
triples))))
|
|
true)
|
|
|
|
(mk-tests-run!)
|