Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Haskell初心者がHaskellの楽しさについて語る

 Haskell初心者がHaskellの楽しさについて語る

Yuto Takamune

February 22, 2023
Tweet

More Decks by Yuto Takamune

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. 2_C

    View Slide

  6. Javaで書くと...

    View Slide

  7. Haskellで書くと...

    View Slide

  8. 気持ち良い〜〜〜〜〜〜!!!!!

    View Slide

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

    View Slide

  10. 2_D

    View Slide

  11. Javaで書くと...

    View Slide

  12. Haskellで書くと...

    View Slide

  13. 全体的にスッキリ

    View Slide

  14. 3_A

    View Slide

  15. Javaで書くと...

    View Slide

  16. Haskellで書くと...

    View Slide

  17. ん??なんで再帰???

    View Slide

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

    View Slide

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

    View Slide

  20. 6_B

    View Slide

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

    View Slide

  22. ちゃんと綺麗なコード

    View Slide

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

    View Slide

  24. Haskellで書くと...

    View Slide

  25. main関数はなんと3行!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. みんなもHaskell、やろう!

    View Slide