Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

すごいHaskell読書会#1 in 大阪

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 21 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Publicité

Similaire à すごいHaskell読書会#1 in 大阪 (20)

すごいHaskell読書会#1 in 大阪

  1. 1. すごいH本 読書会 #1 @yashigani
  2. 2. [today tableOfContents] はじめに 1章,2章のおさらい 関数呼出/定義 リスト タプル 型 練習問題的な
  3. 3. はじめに 関数型言語の経験は? (私の場合)ほんのちょっとの Scheme と少しの Scala なんで Haskell やろうと思いましたか? ちなみに今回の発表はドシロウトが発表しますので,わいわいツッコ ミを入れながら楽しんでいただけると幸いです わからないことは随時手を挙げて発言してください 誰かが答えます
  4. 4. 基本的なところ だいたい想像通りです +,-,*,/,div,mod True ¦ False not True # => False True == False # => False True /= False # => True Selipnir + 3 # => ?
  5. 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. 6. 関数定義 関数名 引数 = 処理 doubleUpMe x = x * 2 if 式 odd n = if n `mod` 2 == 1 then True else False else は必須
  7. 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]] 比較
  8. 8. リストの操作 head tail last init
  9. 9. 大事なことなので tail head last init
  10. 10. 本当に大事なことなので... head init tail last
  11. 11. リストの操作(2) length null reverse take drop maximum minimum elem
  12. 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. 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. 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. 15. 型 型宣言 zip :: [a] -> [b] -> [(a, b)] 型にあってないものはコンパイルできない -> Haskell ではコンパイル時にすべての型が自明 型推論 コンパイラが予想して補完してくれてた read 5 みたいなのは実行時まで推論できない read 5 :: Int のように明示してやる
  16. 16. 型変数 オブジェクト指向のクラス...ではない ジェネリクスみたいなもの (==) :: Eq a => a -> a -> Bool 型変数 型クラスは抽象的なインターフェース 型は複数の型クラスのインスタンスである
  17. 17. 代表的な型クラス Eq Ord Show Read Enum Bounded Num Floating Integral
  18. 18. ここまでで質問ある方 言いたいことのある方 どうぞ!
  19. 19. [today exercise1] 以下の関数を自分で定義してみる null sum product elem python のスライスを実装する ex) slice 2 5 [1..7] # => [3, 4, 5]
  20. 20. [today exercise2] フィボナッチ数列のn番目の数列を返す関数を作る FizzBuzzの n 項目から m 項目までのリストを返す関数を作る ex) fizzBuzz 50 100 # => 50番目から100番目までを返す fizzBuzz :: Int -> Int -> [[Char]]
  21. 21. [today exercise3] 3けたの整数のうち、次の条件を満たすものを「良い整数」とよぶこ とにします。 条件:3けたの整数を2つの整数に分けてその和を考えると、常にも との整数の約数になっている。 (例)330は3と30に分けても、33と0に分けても和が330の約数に なっています。このため、330は「良い整数」となります。ですが、 702は7と02に分けた場合は約数になりますが、70と2に分けてしま うと約数になりません。よって、702は「良い整数」ではありませ ん。 一の位が0でない「良い整数」を4個求めなさい。

×