SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
すごい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個求めなさい。

Contenu connexe

Tendances

Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復Enumerable な何か、あるいは怠惰なる反復
Enumerable な何か、あるいは怠惰なる反復
Tadashi Sawada
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
 

Tendances (20)

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

En vedette

「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
Taketo Sano
 

En vedette (8)

情報幾何学 #2.4
情報幾何学 #2.4情報幾何学 #2.4
情報幾何学 #2.4
 
情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16情報幾何学 #2 #infogeo16
情報幾何学 #2 #infogeo16
 
基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先基底変換、固有値・固有ベクトル、そしてその先
基底変換、固有値・固有ベクトル、そしてその先
 
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
「数える」とは何か? 〜 「とは何か?」を問う、AI時代の数学
 
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
プログラマのための線形代数再入門2 〜 要件定義から学ぶ行列式と逆行列
 
プログラマのための線形代数再入門
プログラマのための線形代数再入門プログラマのための線形代数再入門
プログラマのための線形代数再入門
 
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料 「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
 
ConvNetの歴史とResNet亜種、ベストプラクティス
ConvNetの歴史とResNet亜種、ベストプラクティスConvNetの歴史とResNet亜種、ベストプラクティス
ConvNetの歴史とResNet亜種、ベストプラクティス
 

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

初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
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
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
Prunus 1350
 

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

初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
R language definition3.1_3.2
R language definition3.1_3.2R language definition3.1_3.2
R language definition3.1_3.2
 
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のこと
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
 
プログラミング講座 #2 複雑なデータの扱い
プログラミング講座 #2 複雑なデータの扱いプログラミング講座 #2 複雑なデータの扱い
プログラミング講座 #2 複雑なデータの扱い
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 

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