SlideShare a Scribd company logo
すごいH本 読書会 #1
           @yashigani
[today tableOfContents]


   はじめに

   1章,2章のおさらい

    関数呼出/定義

    リスト

    タプル

    型

   練習問題的な
はじめに

関数型言語の経験は?

 (私の場合)ほんのちょっとの Scheme と少しの Scala




なんで Haskell やろうと思いましたか?




ちなみに今回の発表はドシロウトが発表しますので,わいわいツッコ
ミを入れながら楽しんでいただけると幸いです

わからないことは随時手を挙げて発言してください

 誰かが答えます
基本的なところ


だいたい想像通りです

   +,-,*,/,div,mod

True ¦ False

   not True # => False

   True == False # => False

   True /= False # => True

Selipnir + 3 # => ?
実は...

今までのは全部関数呼び出しです

 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
関数定義




関数名 引数 = 処理

  doubleUpMe x = x * 2

if 式

  odd n = if n `mod` 2 == 1 then True else False

  else は必須
リスト

連結

 [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]]

比較
リストの操作




head

tail

last

init
大事なことなので

       tail

head


                      last



                    init
本当に大事なことなので...



  head   init




tail            last
リストの操作(2)

length

null

reverse

take

drop

maximum

minimum

elem
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]
リスト内包表記



                 [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]]]
タプル


複数の違う型の要素をまとめて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")]
型

型宣言

 zip :: [a] -> [b] -> [(a, b)]

 型にあってないものはコンパイルできない

 -> Haskell ではコンパイル時にすべての型が自明


型推論

 コンパイラが予想して補完してくれてた

 read 5 みたいなのは実行時まで推論できない

    read 5 :: Int のように明示してやる
型変数



オブジェクト指向のクラス...ではない

ジェネリクスみたいなもの



    (==) :: Eq a => a -> a -> Bool
           型変数



型クラスは抽象的なインターフェース

型は複数の型クラスのインスタンスである
代表的な型クラス

Eq

Ord

Show

Read

Enum

Bounded

Num

Floating

Integral
ここまでで質問ある方
言いたいことのある方
   どうぞ!
[today exercise1]


   以下の関数を自分で定義してみる

    null

    sum

    product

    elem

   python のスライスを実装する

    ex) slice 2 5 [1..7] # => [3, 4, 5]
[today exercise2]




   フィボナッチ数列のn番目の数列を返す関数を作る




   FizzBuzzの n 項目から m 項目までのリストを返す関数を作る

    ex) fizzBuzz 50 100 # => 50番目から100番目までを返す

    fizzBuzz :: Int -> Int -> [[Char]]
[today exercise3]


   3けたの整数のうち、次の条件を満たすものを「良い整数」とよぶこ
   とにします。

   条件:3けたの整数を2つの整数に分けてその和を考えると、常にも
   との整数の約数になっている。

   (例)330は3と30に分けても、33と0に分けても和が330の約数に
   なっています。このため、330は「良い整数」となります。ですが、
   702は7と02に分けた場合は約数になりますが、70と2に分けてしま
   うと約数になりません。よって、702は「良い整数」ではありませ
   ん。

   一の位が0でない「良い整数」を4個求めなさい。

More Related Content

PDF
Elixirだ 第1回強化版 後半
PDF
Elixirだ 第1回強化版 前半
PDF
Elixirだ 第2回
PDF
Elixirだ 第1回 - 基礎だ -
PDF
Introduction Xtend
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
関西Scala勉強会 パターンマッチング
PDF
PCさえあればいい。
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 前半
Elixirだ 第2回
Elixirだ 第1回 - 基礎だ -
Introduction Xtend
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
関西Scala勉強会 パターンマッチング
PCさえあればいい。

What's hot (20)

PDF
Python勉強会3-コレクションとファイル
KEY
とびだせHaskellの森1
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
PPTX
Effective python#28
PDF
15分でざっくり分かるScala入門
PDF
Python勉強会4-制御構文とパッケージ
PPTX
R6パッケージの紹介―機能と実装
PDF
テストではまったお話 Test::More
KEY
Enumerable な何か、あるいは怠惰なる反復
PDF
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
PDF
Haskell で CLI
KEY
Applicative functor
PDF
F#入門 ~関数プログラミングとは何か~
PDF
Livesense tech night immutable-js at a glance
PDF
Lisp batton - Common LISP
PDF
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
PPTX
F#のすすめ
PDF
R入門(dplyrでデータ加工)-TokyoR42
PDF
Pgunconf pg94-select小ネタ
PPTX
IdrisでWebアプリを書く
Python勉強会3-コレクションとファイル
とびだせHaskellの森1
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Effective python#28
15分でざっくり分かるScala入門
Python勉強会4-制御構文とパッケージ
R6パッケージの紹介―機能と実装
テストではまったお話 Test::More
Enumerable な何か、あるいは怠惰なる反復
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Haskell で CLI
Applicative functor
F#入門 ~関数プログラミングとは何か~
Livesense tech night immutable-js at a glance
Lisp batton - Common LISP
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
F#のすすめ
R入門(dplyrでデータ加工)-TokyoR42
Pgunconf pg94-select小ネタ
IdrisでWebアプリを書く
Ad

Similar to すごいHaskell読書会#1 in 大阪 (20)

PDF
プログラミングHaskell(第2章)
PDF
すごいHaskell楽しく学ぼう 第6章
PDF
たのしい関数型
PDF
Haskell超入門 Part.1
PDF
初めてのHaskell (表)
PDF
関数プログラミング入門
PDF
すごいHaskell読書会 第六章 発表資料
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PPT
Pythonintro
PDF
Haskell Lecture 1
PDF
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
PDF
すごいH 第12章モノイド
PPTX
Programming Haskell Chapter 11 切符番号選び
PDF
関数型プログラミング入門 with OCaml
ODP
Haskell
ODP
これから Haskell を書くにあたって
KEY
Algebraic DP: 動的計画法を書きやすく
PDF
スタートHaskell2 型を信じろ
PPTX
第3章 型とクラス
PPTX
第3章 型とクラス
プログラミングHaskell(第2章)
すごいHaskell楽しく学ぼう 第6章
たのしい関数型
Haskell超入門 Part.1
初めてのHaskell (表)
関数プログラミング入門
すごいHaskell読書会 第六章 発表資料
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Pythonintro
Haskell Lecture 1
すごいHaskell読書会 in 大阪 2週目 #5 第5章:高階関数 (2)
すごいH 第12章モノイド
Programming Haskell Chapter 11 切符番号選び
関数型プログラミング入門 with OCaml
Haskell
これから Haskell を書くにあたって
Algebraic DP: 動的計画法を書きやすく
スタートHaskell2 型を信じろ
第3章 型とクラス
第3章 型とクラス
Ad

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