From 7633e42d95095e16ad459de6cd65b9f7e700136b Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Sat, 1 Jan 2011 19:25:58 +0000 Subject: examples/bool.hs --- examples/bool.hs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 examples/bool.hs (limited to 'examples') 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 @@ +-- vectorized boolean operations defined in terms of step or cond + +import Numeric.LinearAlgebra + +infix 4 .==., ./=., .<., .<=., .>=., .>. +infixr 3 .&&. +infixr 2 .||. + +a .<. b = step (b-a) +a .<=. b = cond a b 1 1 0 +a .==. b = cond a b 0 1 0 +a ./=. b = cond a b 1 0 1 +a .>=. b = cond a b 0 1 1 +a .>. b = step (a-b) + +a .&&. b = step (a*b) +a .||. b = step (a+b) +no a = 1-a +xor a b = a ./=. b +equiv a b = a .==. b +imp a b = no a .||. b + +taut x = minElement x == 1 + +-- examples + +clip a b x = cond y b y y b where y = cond x a a x x + +disp = putStr . dispf 3 + +eye n = ident n :: Matrix Double +row = asRow . fromList :: [Double] -> Matrix Double +col = asColumn . fromList :: [Double] -> Matrix Double + +m = (3><4) [1..] :: Matrix Double + +p = row [0,0,1,1] +q = row [0,1,0,1] + +main = do + print $ find (>6) m + disp $ assoc (6,8) 7 $ zip (find (/=0) (eye 5)) [10..] + disp $ m .>=. 10 .||. m .<. 4 + (disp . fromColumns . map flatten) [p, q, p.&&.q, p .||.q, p `xor` q, p `equiv` q, p `imp` q] + print $ taut $ (p `imp` q ) `equiv` (no q `imp` no p) + print $ taut $ (xor p q) `equiv` (p .&&. no q .||. no p .&&. q) + disp $ clip 3 8 m + disp $ col [1..7] .<=. row [1..5] + disp $ cond (col [1..3]) (row [1..4]) m 50 (3*m) + -- cgit v1.2.3