on master help sign in
Fixed matrixBuilder
commit1a819dd7c6204acc8dcd5a925ffc54f9c300b6bd authorArmando Santos <armandoifsantos@gmail.com> dateMon 24 Feb 2020, 20:09 (7 years ago) parent77aae98
2 files changed+27−5
app/Examples.hs+20−3 src/LAoP/Matrix/Internal.hs+7−2
app/Examples.hs+20−3
@@ -67,13 +67,30 @@ data R = No | Yes
6767 deriving (Bounded, Enum, Eq, Show, G.Generic)
6868
6969rain :: Matrix Double () R
70−rain = col [0.8, 0.2]
70+rain = matrixBuilder gen
71+ where
72+ gen (_, No) = 0.8
73+ gen (_, Yes) = 0.2
7174
7275sprinkler :: Matrix Double R S
73−sprinkler = fromLists [[0.6, 0.99], [0.4, 0.01]]
76+sprinkler = matrixBuilder gen
77+ where
78+ gen (No, Off) = 0.6
79+ gen (No, On) = 0.99
80+ gen (Yes, Off) = 0.4
81+ gen (Yes, On) = 0.01
7482
7583grass :: Matrix Double (S, R) G
76−grass = fromLists [[1, 0.2, 0.1, 0.01], [0, 0.8, 0.9, 0.99]]
84+grass = matrixBuilder gen
85+ where
86+ gen ((Off, No), Dry) = 1
87+ gen ((Off, Yes), Dry) = 0.2
88+ gen ((On, No), Dry) = 0.1
89+ gen ((On, Yes), Dry) = 0.01
90+ gen ((Off, No), Wet) = 0
91+ gen ((Off, Yes), Wet) = 0.8
92+ gen ((On, No), Wet) = 0.9
93+ gen ((On, Yes), Wet) = 0.99
7794
7895tag f = kr f iden
7996
src/LAoP/Matrix/Internal.hs+7−2
@@ -372,6 +372,7 @@ matrixBuilder' f =
372372matrixBuilder ::
373373 forall e a b.
374374 ( FromListsN e a b,
375+ CountableN b,
375376 Enum a,
376377 Enum b,
377378 Bounded a,
@@ -380,8 +381,12 @@ matrixBuilder ::
380381 CountableDimensionsN a b
381382 ) => ((a, b) -> e) -> Matrix e (Normalize a) (Normalize b)
382383matrixBuilder f =
383− let positions = [(a, b) | a <- [minBound .. maxBound], b <- [minBound .. maxBound]]
384− in fromLists . map (map f) . groupBy (\(x, _) (w, _) -> x == w) $ positions
384+ let r = fromInteger $ natVal (Proxy :: Proxy (Count (Normalize b)))
385+ positions = [(a, b) | a <- [minBound .. maxBound], b <- [minBound .. maxBound]]
386+ in fromLists . map (map f) . transpose . buildList r $ positions
387+ where
388+ buildList _ [] = []
389+ buildList r l = take r l : buildList r (drop r l)
385390
386391-- | Constructs a column vector matrix
387392col :: (FromLists e () rows) => [e] -> Matrix e () rows