diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/bool.hs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/examples/bool.hs b/examples/bool.hs new file mode 100644 index 0000000..9301689 --- /dev/null +++ b/examples/bool.hs | |||
@@ -0,0 +1,50 @@ | |||
1 | -- vectorized boolean operations defined in terms of step or cond | ||
2 | |||
3 | import Numeric.LinearAlgebra | ||
4 | |||
5 | infix 4 .==., ./=., .<., .<=., .>=., .>. | ||
6 | infixr 3 .&&. | ||
7 | infixr 2 .||. | ||
8 | |||
9 | a .<. b = step (b-a) | ||
10 | a .<=. b = cond a b 1 1 0 | ||
11 | a .==. b = cond a b 0 1 0 | ||
12 | a ./=. b = cond a b 1 0 1 | ||
13 | a .>=. b = cond a b 0 1 1 | ||
14 | a .>. b = step (a-b) | ||
15 | |||
16 | a .&&. b = step (a*b) | ||
17 | a .||. b = step (a+b) | ||
18 | no a = 1-a | ||
19 | xor a b = a ./=. b | ||
20 | equiv a b = a .==. b | ||
21 | imp a b = no a .||. b | ||
22 | |||
23 | taut x = minElement x == 1 | ||
24 | |||
25 | -- examples | ||
26 | |||
27 | clip a b x = cond y b y y b where y = cond x a a x x | ||
28 | |||
29 | disp = putStr . dispf 3 | ||
30 | |||
31 | eye n = ident n :: Matrix Double | ||
32 | row = asRow . fromList :: [Double] -> Matrix Double | ||
33 | col = asColumn . fromList :: [Double] -> Matrix Double | ||
34 | |||
35 | m = (3><4) [1..] :: Matrix Double | ||
36 | |||
37 | p = row [0,0,1,1] | ||
38 | q = row [0,1,0,1] | ||
39 | |||
40 | main = do | ||
41 | print $ find (>6) m | ||
42 | disp $ assoc (6,8) 7 $ zip (find (/=0) (eye 5)) [10..] | ||
43 | disp $ m .>=. 10 .||. m .<. 4 | ||
44 | (disp . fromColumns . map flatten) [p, q, p.&&.q, p .||.q, p `xor` q, p `equiv` q, p `imp` q] | ||
45 | print $ taut $ (p `imp` q ) `equiv` (no q `imp` no p) | ||
46 | print $ taut $ (xor p q) `equiv` (p .&&. no q .||. no p .&&. q) | ||
47 | disp $ clip 3 8 m | ||
48 | disp $ col [1..7] .<=. row [1..5] | ||
49 | disp $ cond (col [1..3]) (row [1..4]) m 50 (3*m) | ||
50 | |||