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個求めなさい。
Ad

More Related Content

What's hot (20)

Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
理 小林
 
とびだせHaskellの森1
とびだせHaskellの森1とびだせHaskellの森1
とびだせHaskellの森1
Shoko Sasaki
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
Effective python#28
Effective python#28Effective python#28
Effective python#28
bontakun
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
理 小林
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::More
Tetsuya Tatsumi
 
Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復
Tadashi Sawada
 
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
Nobutada Matsubara
 
Applicative functor
Applicative functorApplicative functor
Applicative functor
Yuichi Adachi
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
Livesense tech night immutable-js at a glance
Livesense tech night   immutable-js at a glanceLivesense tech night   immutable-js at a glance
Livesense tech night immutable-js at a glance
Yuta Shimakawa
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
Hiromu Sasaki
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
Atsushi Hayakawa
 
Pgunconf pg94-select小ネタ
Pgunconf pg94-select小ネタPgunconf pg94-select小ネタ
Pgunconf pg94-select小ネタ
Toshi Harada
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
 
Python勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイルPython勉強会3-コレクションとファイル
Python勉強会3-コレクションとファイル
理 小林
 
とびだせHaskellの森1
とびだせHaskellの森1とびだせHaskellの森1
とびだせHaskellの森1
Shoko Sasaki
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
Effective python#28
Effective python#28Effective python#28
Effective python#28
bontakun
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
理 小林
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
 
テストではまったお話 Test::More
テストではまったお話 Test::Moreテストではまったお話 Test::More
テストではまったお話 Test::More
Tetsuya Tatsumi
 
Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復
Tadashi Sawada
 
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Kenta USAMI
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
Livesense tech night immutable-js at a glance
Livesense tech night   immutable-js at a glanceLivesense tech night   immutable-js at a glance
Livesense tech night immutable-js at a glance
Yuta Shimakawa
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
Jun Nogata
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
Atsushi Hayakawa
 
Pgunconf pg94-select小ネタ
Pgunconf pg94-select小ネタPgunconf pg94-select小ネタ
Pgunconf pg94-select小ネタ
Toshi Harada
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
 

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

純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
karky7
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
Masahiro Hayashi
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
 
From Scala/Clojure to Kotlin
From Scala/Clojure to KotlinFrom Scala/Clojure to Kotlin
From Scala/Clojure to Kotlin
Kent Ohashi
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
maeken2010
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
higaki
 
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
Kent Ohashi
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
karky7
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
Daisuke Igarashi
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
Masahiro Hayashi
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
 
From Scala/Clojure to Kotlin
From Scala/Clojure to KotlinFrom Scala/Clojure to Kotlin
From Scala/Clojure to Kotlin
Kent Ohashi
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
maeken2010
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
Nishida Kansuke
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
higaki
 
Ad

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

  翻译: