diff options
author | Camil Staps | 2016-09-25 14:32:22 +0200 |
---|---|---|
committer | Camil Staps | 2016-09-25 14:32:22 +0200 |
commit | e68199d88f3561d10f576b328265fa0a122d87a3 (patch) | |
tree | 7ef031aaad802c654db849c06ad76152e6f09bb3 /examples | |
parent | Added code: add, eq, ge, gt, le, lt, ne (diff) |
Added acker and queens examples
Diffstat (limited to 'examples')
-rw-r--r-- | examples/acker.fusp | 8 | ||||
-rw-r--r-- | examples/queens.fusp | 32 |
2 files changed, 40 insertions, 0 deletions
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 [] []); |