Slide 1

Slide 1 text

Haskell初心者がHaskellの楽 しさについて語る Zli 追い出しLT2023 s1290035 しんぶんぶん

Slide 2

Slide 2 text

Haskellって...気持ち良くないですか?

Slide 3

Slide 3 text

なぜHaskellをやろうと思ったのか ● Answer: Rustをもっと深く理解したかったから ● Rustの型クラス(Trait)はHaskellに影響を受けている ● HaskellをやればRustをもっと理解できるのでは...!?という思いと、純粋関数型 言語に慣れたくてやってみた

Slide 4

Slide 4 text

AOJのITP1を何問か解いてみた

Slide 5

Slide 5 text

2_C

Slide 6

Slide 6 text

Javaで書くと...

Slide 7

Slide 7 text

Haskellで書くと...

Slide 8

Slide 8 text

気持ち良い〜〜〜〜〜〜!!!!!

Slide 9

Slide 9 text

解説 ● 1~3行目: モジュールのインポート ● 6行目: 標準入力 ○ getLineで読み込まれた入力を wordsを使って空白区切りでリストにし、 map (read :: String -> Int) でリストの中身をStringからIntに変換 ● 7行目: 加工して出力 ○ sort sでリストを昇順ソート ○ それをmap showに渡してリストの中身を Stringに変換 ○ それをunwordsに渡して空白区切りの文字列に変換 ○ それをputStrLnに渡して出力

Slide 10

Slide 10 text

2_D

Slide 11

Slide 11 text

Javaで書くと...

Slide 12

Slide 12 text

Haskellで書くと...

Slide 13

Slide 13 text

全体的にスッキリ

Slide 14

Slide 14 text

3_A

Slide 15

Slide 15 text

Javaで書くと...

Slide 16

Slide 16 text

Haskellで書くと...

Slide 17

Slide 17 text

ん??なんで再帰???

Slide 18

Slide 18 text

Haskellのループは基本再帰らしい ● Haskellにfor文とかwhile文はない ● ループ処理を書きたい時は再帰関数を使う ● flip fixを使うと手続型っぽい書き方もできるらしい ○ https://qiita.com/lotz/items/0894079a44e87dc8b73e

Slide 19

Slide 19 text

いよいよ今日一気持ち良い問題

Slide 20

Slide 20 text

6_B

Slide 21

Slide 21 text

まつもと先輩がC++で書くと...

Slide 22

Slide 22 text

ちゃんと綺麗なコード

Slide 23

Slide 23 text

これをHaskellで書くとなんと...

Slide 24

Slide 24 text

Haskellで書くと...

Slide 25

Slide 25 text

main関数はなんと3行!

Slide 26

Slide 26 text

コード解説 ● 1~4行目: モジュールのimport ● 7行目: 入力を全てssに読み込み ● 8行目: コアロジック全て ○ lines ssで入力を改行区切りでリストにする ・・・① ○ (++) <$> ["S ", "H ", "C ", "D "] <*> map show [1 .. 13] :: [String])で、S1, S2, … D13までのリスト を作成・・・② ○ //で①と②の差分リストを作成 ○ そのリストをunlinesに食わせて改行区切りの文字列に変換 ○ putStrに食わせて出力

Slide 27

Slide 27 text

気持ち良すぎだろ!!!!!

Slide 28

Slide 28 text

今後の展望 ● すごいH本がまだ2章残ってるので読み切る ● HaskellでLispインタプリンタを作る ● モナディックパーサーで何か作る ● OCamlを履修する(Rustのために) 次回はこのどれかのLTを話す(予定)

Slide 29

Slide 29 text

みんなもHaskell、やろう!