annotate Haskell/baby.hs @ 117:166136236891 pairPro

add header files
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Wed, 25 Nov 2015 14:58:03 +0900
parents 0f4ccdbaf57f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 --http://www.haskell.org/hoogle
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 {-
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 -}
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 doubleMe x = x + x
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 doubleUs x y = x * 2 + y * 2
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 doubleSmallNumber x = if x > 100
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 then "x"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 else "y"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 masa'koha' x = x
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 lucky :: Int -> String
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 lucky 7 = "LUCKY NUMBER SEVEN"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 lucky x = "Sorry, you're out of luck, pal!"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 factorial :: Int -> Int
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 factorial 0 = 1
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 factorial n = n * factorial (n - 1)
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 charName :: Char -> String
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 charName 'a' = "Albert"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 charName 'b' = "Broseph"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 charName n = "no match"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 addVectors :: (Double, Double) -> (Double, Double) -> (Double, Double)
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 addVectors a b = (fst a + fst b, snd a + snd b)
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 head' :: [a] -> a
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 head' [] = error "Can't call head on an empty list,dummy!"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 head' (x:_) = x
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 firstLetter :: String -> String
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 firstLetter "" = "Empty string"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 firstLetter all@(x:xs) = "The first letter of " ++ all ++ " is " ++ [x]
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 bmiTell :: Double -> Double -> String
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 bmiTell weight height
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 | bmi <= 18.5 = "You're underweight, you emo, you!"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 | bmi <= 25.0 = "You're supposedly normal.\\ Pffft, I bet you're ugly!"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 | bmi <= 30.0 = "You're a fat,"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 | otherwise = "You're a whale, congratulations!"
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 where bmi = weight / height ^ 2
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 describeList :: [a] -> String
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 describeList ls = "The list is "
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 ++ case ls of [] -> "empty."
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 [x] -> "a singleton list."
8c7e1b34582f add baby.hs
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 xs -> "a longer list."
26
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
51
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
52 maximum' :: (Ord a) => [a] -> a
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
53 maximum' [] = error "maximum of empty list!"
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
54 maximum' [x] = x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
55 maximum' (x:xs) = max x (maximum' xs)
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
56
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
57 replicate' :: Int -> a -> [a]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
58 replicate' n x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
59 | n <= 0 = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
60 | otherwise = x : replicate' (n-1) x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
61
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
62 take' :: Int -> [a] -> [a]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
63 take' n _
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
64 | n <= 0 = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
65 take' _ [] = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
66 take' n (x:xs) = x : take' (n-1) xs
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
67
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
68 reverse' :: [a] -> [a]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
69 reverse' [] = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
70 reverse' (x:xs) = reverse' xs ++ [x]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
71
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
72 repeat' :: a -> [a]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
73 repeat' x = x : repeat' x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
74
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
75 quicksort :: (Ord a) => [a] -> [a]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
76 quicksort [] = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
77 quicksort (x:xs) =
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
78 let smallerOrEqual = [a| a<-xs, a<= x]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
79 larger = [a | a<-xs, a>x]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
80 in quicksort smallerOrEqual ++ [x] ++ quicksort larger
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
81
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
82 -- Chapter 5
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
83
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
84 multThree :: Int -> Int -> Int -> Int
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
85 multThree x y z = x * y * z
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
86
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
87 compareWithHundred :: Int -> Ordering
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
88 compareWithHundred x = compare 100 x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
89
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
90 compareWithHundred' :: Int -> Ordering
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
91 compareWithHundred' = compare 100
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
92
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
93 zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
94 -- 型推論をさせると zipWith' :: (t -> t1 -> a) -> [t] -> [t1] -> [a] となる
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
95 zipWith' _ [] _ = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
96 zipWith' _ _ [] = []
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
97 zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
98
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
99 flip' :: (a -> b -> c) -> (b -> a -> c)
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
100 flip' f = g
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
101 where g x y = f y x
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
102
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
103 chain :: Integer -> [Integer]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
104 chain 1 = [1]
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
105 chain n
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
106 | even n = n : chain (n `div` 2)
0f4ccdbaf57f add mmap
Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
107 | odd n = n : chain (n * 3 + 1)