summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/bool.hs50
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
3import Numeric.LinearAlgebra
4
5infix 4 .==., ./=., .<., .<=., .>=., .>.
6infixr 3 .&&.
7infixr 2 .||.
8
9a .<. b = step (b-a)
10a .<=. b = cond a b 1 1 0
11a .==. b = cond a b 0 1 0
12a ./=. b = cond a b 1 0 1
13a .>=. b = cond a b 0 1 1
14a .>. b = step (a-b)
15
16a .&&. b = step (a*b)
17a .||. b = step (a+b)
18no a = 1-a
19xor a b = a ./=. b
20equiv a b = a .==. b
21imp a b = no a .||. b
22
23taut x = minElement x == 1
24
25-- examples
26
27clip a b x = cond y b y y b where y = cond x a a x x
28
29disp = putStr . dispf 3
30
31eye n = ident n :: Matrix Double
32row = asRow . fromList :: [Double] -> Matrix Double
33col = asColumn . fromList :: [Double] -> Matrix Double
34
35m = (3><4) [1..] :: Matrix Double
36
37p = row [0,0,1,1]
38q = row [0,1,0,1]
39
40main = 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