Weitere ähnliche Inhalte
Ähnlich wie すごいHaskell読書会#1 in 大阪 (20)
すごいHaskell読書会#1 in 大阪
- 4. 基本的なところ
だいたい想像通りです
+,-,*,/,div,mod
True ¦ False
not True # => False
True == False # => False
True /= False # => True
Selipnir + 3 # => ?
- 5. 実は...
今までのは全部関数呼び出しです
succ 5 # => 6
max 9 10 # => 10
max (9 + 2) 10 # => 11
succ 9 * 10 # => 100
5 * 2 # => 10
9 `max` 10 # => 10
(*) 5 2 # => 10
- 6. 関数定義
関数名 引数 = 処理
doubleUpMe x = x * 2
if 式
odd n = if n `mod` 2 == 1 then True else False
else は必須
- 7. リスト
連結
[1, 2, 3] ++ [4, 5, 6] # => [1, 2, 3, 4, 5, 6]
1:[2, 3, 4] # => [1, 2, 3, 4]
要素にアクセス
Haskell !! 3 # => k
ネスト
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
比較
- 12. Range
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # => ugly!
[1..10] # => cool!
[ a .. z ] # => abcdefghijklmnopqrstuvwxyz
[2, 4..2 * 9] # => [2, 4, 6, 8, 10, 12, 14, 16, 18]
[1..] # => [1, 2, 3, 4, 5.....]
[2, 4..] # => 2の倍数の無限リスト
take 12 (cycle "hoge ") # => "hoge hoge ho"
take 3 (repeat 5) # => [5, 5, 5]
replicate 3 5 # => [5, 5, 5]
- 13. リスト内包表記
[x * 2 ¦ x <- [1..10]]
[x * 2 ¦ x <- [1..10], x > 5]
ジェネレータ フィルタ
[1 ¦ _ <- [1, 2, 3], _ <- [4, 5, 6]]
[[x * 2 ¦ x <- xs] ¦ xs <- [[1,2,3], [4,5,6], [7,8,9]]]
- 14. タプル
複数の違う型の要素をまとめて1つの値として使う
( Mountain Lion , 10.8)
違う型を入れられる
固定長
zip
zip [1, 2, 3] [4, 5, 6] # => [(1, 4), (2, 5), (3, 6)]
zip [1,2,3,4] (repeat "hoge") # => [(1,"hoge"),(2,"hoge"),
(3,"hoge"),(4,"hoge")]
- 15. 型
型宣言
zip :: [a] -> [b] -> [(a, b)]
型にあってないものはコンパイルできない
-> Haskell ではコンパイル時にすべての型が自明
型推論
コンパイラが予想して補完してくれてた
read 5 みたいなのは実行時まで推論できない
read 5 :: Int のように明示してやる
- 19. [today exercise1]
以下の関数を自分で定義してみる
null
sum
product
elem
python のスライスを実装する
ex) slice 2 5 [1..7] # => [3, 4, 5]
- 20. [today exercise2]
フィボナッチ数列のn番目の数列を返す関数を作る
FizzBuzzの n 項目から m 項目までのリストを返す関数を作る
ex) fizzBuzz 50 100 # => 50番目から100番目までを返す
fizzBuzz :: Int -> Int -> [[Char]]
- 21. [today exercise3]
3けたの整数のうち、次の条件を満たすものを「良い整数」とよぶこ
とにします。
条件:3けたの整数を2つの整数に分けてその和を考えると、常にも
との整数の約数になっている。
(例)330は3と30に分けても、33と0に分けても和が330の約数に
なっています。このため、330は「良い整数」となります。ですが、
702は7と02に分けた場合は約数になりますが、70と2に分けてしま
うと約数になりません。よって、702は「良い整数」ではありませ
ん。
一の位が0でない「良い整数」を4個求めなさい。