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