姫路 it 系勉強会 vol. 11 l1 グランプリ haskell

27
姫路 IT 系勉強会 Vol. 11 @kakkun61 1/27 姫路 IT 系勉強会 Vol.11 L1 グランプリ Haskell @kakkun61

Upload: kazkuki-oakamoto

Post on 12-May-2015

498 views

Category:

Technology


4 download

DESCRIPTION

姫路 IT 系勉強会 Vol.11 2012.11.17 問題 https://sites.google.com/site/himejiitstudy/2012/20121117/questions

TRANSCRIPT

Page 1: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 1/27

姫路 IT 系勉強会 Vol.11L1 グランプリ

Haskell

@kakkun61

Page 2: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 2/27

自己紹介

● 岡本和樹● @kakkun61● 23 歳● 大阪府立大学 4 回生● Haskell 歴 本格的には半年ぐらい

Page 3: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 3/27

Haskell

Page 4: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 4/27

Haskell

Page 5: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 5/27

Haskell

● 純粋関数型● 遅延評価● 参照透明● 代数的データ型● モナド

Page 6: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 6/27

Haskell

● 純粋関数型● 遅延評価● 参照透明● 代数的データ型● モナド

こわくないよ!

Page 7: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 7/27

Haskell

● とりあえず『すごい Haskell たのしく学ぼう!』読む

● 読んだら気付いたら分かってる

Page 8: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 8/27

Haskell

Page 9: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 9/27

Haskell

● 会議で委員会が発足しそこで作られた珍しい言語

● 学術的な方面から● 1990 年に最初のバージョン

Page 10: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 10/27

Haskell

● デファクトスタンダード● The Glorious Glasgow Haskell Compilation System

● GHC● Simon Peyton Jones と Simon Marlow

Page 11: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 11/27

Haskell

● Simon Peyton Jones● Microsoft Research in Cambridge● C-- の作者でもある

Page 12: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 12/27

問題 1 Fizz Buzz

● 1-100 の Fizz Buzz

Page 13: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 13/27

問題 1 Fizz Buzz

Page 14: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 14/27

問題 1 Fizz Buzz

● fizzbuzz● 数値を取って文字列を返す関数● 1→"1"● 3→"fizz"● 5→"buzz"● ……

Page 15: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 15/27

問題 1 Fizz Buzz

● map fizzbuzz [1..100]● [1, 2, 3, 4, 5, …… 100]● ↓● ["1", "2", "fizz", 4, "buzz", …… "buzz"]

Page 16: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 16/27

問題 1 Fizz Buzz

● mapM_ putStringLn ["1", "2", "fizz", 4, "buzz", …… "buzz"]

● それぞれの要素を 1 行に表示する

Page 17: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 17/27

問題 2 GPA 計算

● A-D, F→4-1, 0 に変換し平均● 出典● AtCoder Regular Contest #3 A 問題

Page 18: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 18/27

問題 2 GPA 計算

Page 19: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 19/27

Page 20: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 20/27

問題 2 GPA 計算

Page 21: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 21/27

問題 2 GPA 計算

Page 22: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 22/27

問題 3 tail -n 5

● tail -n 5

Page 23: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 23/27

問題 3 tail -n 5

Page 24: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 24/27

問題 3 tail -n 5

● arg ← getArgs● 引数に束縛

Page 25: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 25/27

問題 3 tail -n 5

● contents ←● if null args● then getContents● else readFile $ head args● args が null なら標準入力を● じゃなかったら args の 1つめのファイル名のファイルを読んで contents を束縛

Page 26: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 26/27

問題 3 tail -n 5

● putStr . unlines . reverse . take 5 . reverse . lines $ contents

● contents (文字列)を lines で行のリストに変換

● reverse で反転● take 5 で頭から 5つだけにする● reverse で反転

Page 27: 姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell

姫路 IT 系勉強会 Vol. 11 @kakkun61 27/27

問題 3 tail -n 5

● putStr . unlines . reverse . take 5 . reverse . lines $ contents

● unlines で行のリストを改行区切りの 1つの文字列に

● putStr で出力