From e68199d88f3561d10f576b328265fa0a122d87a3 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sun, 25 Sep 2016 14:32:22 +0200 Subject: Added acker and queens examples --- examples/acker.fusp | 8 ++++++++ examples/queens.fusp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 examples/acker.fusp create mode 100644 examples/queens.fusp (limited to 'examples') diff --git a/examples/acker.fusp b/examples/acker.fusp new file mode 100644 index 0000000..6e774f0 --- /dev/null +++ b/examples/acker.fusp @@ -0,0 +1,8 @@ +sub a b = code sub a b; +add a b = code add a b; + +acker 0 j = add j 1; +acker i 0 = acker (sub 1 i) 1; +acker i j = acker (sub 1 i) (acker i (sub 1 j)); + +main = acker 3 7; diff --git a/examples/queens.fusp b/examples/queens.fusp new file mode 100644 index 0000000..e509e81 --- /dev/null +++ b/examples/queens.fusp @@ -0,0 +1,32 @@ +add a b = code add a b; +sub a b = code sub a b; +gt a b = code gt a b; +eq a b = code eq a b; + +size = 6; + +if 0 _ b = b; +if 1 a _ = a; +if _ _ _ = not_a_boolean; + +// queens :: Int [Int] [[Int]] -> [[Int]] +queens r b bs = if (gt r size) [b:bs] (try size r b bs); + +// try :: Int Int [Int] [[Int]] -> [[Int]] +try 0 r b bs = bs; +try c r b bs = try (sub 1 c) r b (if (save c 1 b) (queens (add r 1) [c:b] bs) bs); + +// save ::Int Int [Int] -> {0,1} +save c rd [] = 1; +save c rd [c_:cs] = if (save_ c c_ rd) 0 (save c (add rd 1) cs); + +save_ c c_ rd = gt (add (add (eq c c_) (eq (sub c c_) rd)) (eq (sub c_ c) rd)) 0; + +length [] = 0; +length [x:xs] = add (length xs) 1; + +hd [x:xs] = x; + +apptup (f,g) x = (f x, g x); + +main = apptup (length, hd) (queens 1 [] []); -- cgit v1.2.3