annotate delta.hs @ 58:1229ee398567

Mini fixes
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Sat, 22 Nov 2014 12:34:06 +0900
parents dfcd72dc697e
children 46b15f368905
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
279ebcf670c4 Define Similar as Applicative
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
1 import Control.Applicative
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
2 import Data.Numbers.Primes -- $ cabal install primes
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
3
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
4 -- delta definition
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
5
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
6 data Delta a = Mono a | Delta a (Delta a) deriving Show
17
279ebcf670c4 Define Similar as Applicative
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
7
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
8 -- basic functions
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
9
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
10 deltaAppend :: Delta a -> Delta a -> Delta a
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
11 deltaAppend (Mono x) d = Delta x d
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
12 deltaAppend (Delta x d) ds = Delta x (deltaAppend d ds)
47
1aefea69f71b Implement bubble sort by delta
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 46
diff changeset
13
53
1e6fecb54f1f Adjust function name
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
14 headDelta :: Delta a -> Delta a
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
15 headDelta d@(Mono _) = d
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
16 headDelta (Delta x _) = Mono x
14
116131b196bb Define fmap and mu
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
17
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
18 tailDelta :: Delta a -> Delta a
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
19 tailDelta d@(Mono _) = d
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
20 tailDelta (Delta _ ds) = ds
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
21
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
22 -- instance definitions
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
23
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
24 instance Functor Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
25 fmap f (Mono x) = Mono (f x)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
26 fmap f (Delta x d) = Delta (f x) (fmap f d)
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
27
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
28 instance Applicative Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
29 pure f = Mono f
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
30 (Mono f) <*> (Mono x) = Mono (f x)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
31 df@(Mono f) <*> (Delta x d) = Delta (f x) (df <*> d)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
32 (Delta f df) <*> d@(Mono x) = Delta (f x) (df <*> d)
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
33 (Delta f df) <*> (Delta x d) = Delta (f x) (df <*> d)
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
34
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
35 instance Monad Delta where
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
36 return x = Mono x
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
37 (Mono x) >>= f = f x
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
38 (Delta x d) >>= f = (headDelta (f x)) `deltaAppend` (d >>= (tailDelta . f))
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
39
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
40
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
41 -- utils
18
c77397d0677f Try define Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
42
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
43 returnS :: (Show s) => s -> Delta s
57
dfcd72dc697e ReDefine Delta used non-empty-list for infinite changes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
44 returnS x = Mono x
0
7a82a5e50499 Initial commit. define to Functor for Similer
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
46 returnSS :: (Show s) => s -> s -> Delta s
52
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
47 returnSS x y = (returnS x) `deltaAppend` (returnS y)
69a01cc80075 Define Delta for Infinite changes in Haskell
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
48
58
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
49 deltaFromList :: [a] -> Delta a
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
50 deltaFromList = (foldl1 deltaAppend) . (fmap return)
1229ee398567 Mini fixes
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 57
diff changeset
51
23
b4d3960af901 Define similar constructor for different element
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
52
16
4b315cf0edb9 Improve mu definition
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
53 -- samples
3
3c5fbce357af Define >>= for Similer
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
54
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
55 generator :: Int -> Delta [Int]
21
af8754322ed4 Define Similar sample
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
56 generator x = let intList = [1..x] in
22
f0400c4c953f Imporve Similar definition. delete "Single" constructor
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
57 returnS intList
6
5e367a167382 Define samples
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
58
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
59 primeFilter :: [Int] -> Delta [Int]
21
af8754322ed4 Define Similar sample
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
60 primeFilter xs = let primeList = filter isPrime xs
23
b4d3960af901 Define similar constructor for different element
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
61 refactorList = filter even xs in
b4d3960af901 Define similar constructor for different element
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
62 returnSS primeList refactorList
11
e8a5df54480e Define sample for Monad style
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
63
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
64 count :: [Int] -> Delta Int
21
af8754322ed4 Define Similar sample
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
65 count xs = let primeCount = length xs in
22
f0400c4c953f Imporve Similar definition. delete "Single" constructor
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
66 returnS primeCount
15
c599d2236d19 Similar as Monad
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
67
43
90b171e3a73e Rename to Delta from Similar
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
68 primeCount :: Int -> Delta Int
21
af8754322ed4 Define Similar sample
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
69 primeCount x = generator x >>= primeFilter >>= count
46
cb5c190aa45d Define bubble sort
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
70
cb5c190aa45d Define bubble sort
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
71 bubbleSort :: [Int] -> Delta [Int]
48
820af7cc8485 Wrote >>= style bubble sort
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
72 bubbleSort [] = returnS []
49
d654fdecdcd0 Wrote bubble sort with modified calculate
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
73 bubbleSort xs = bubbleSort remainValue >>= (\xs -> returnSS (sortedValueL : xs)
d654fdecdcd0 Wrote bubble sort with modified calculate
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 48
diff changeset
74 (sortedValueR ++ xs))
46
cb5c190aa45d Define bubble sort
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 45
diff changeset
75 where
51
8d9c55bac8b2 Fix typo
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
76 maximumValue = maximum xs
8d9c55bac8b2 Fix typo
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
77 sortedValueL = maximumValue
8d9c55bac8b2 Fix typo
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
78 sortedValueR = replicate (length $ filter (== maximumValue) xs) maximumValue
8d9c55bac8b2 Fix typo
Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
79 remainValue = filter (/= maximumValue) xs