Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Haskell初心者がHaskellの楽しさについて語る
Search
Yuto Takamune
February 22, 2023
Programming
0
150
Haskell初心者がHaskellの楽しさについて語る
Yuto Takamune
February 22, 2023
Tweet
Share
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
0
250
RustのLINEBot SDKを自作した話
shinbunbun_
0
980
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
2.8k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
2.6k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
170
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
320
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
880
IEEE802.1X認証を導入してみた
shinbunbun_
0
200
UBICの食材管理APIを作った話
shinbunbun_
0
180
Other Decks in Programming
See All in Programming
CSC305 Lecture 13
javiergs
PRO
0
130
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
240
From Subtype Polymorphism To Typeclass-based Ad hoc Polymorphism- An Example
philipschwarz
PRO
0
170
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
420
[PyCon Korea 2024 Keynote] 커뮤니티와 파이썬, 그리고 우리
beomi
0
110
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
1
290
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
830
生成 AI を活用した toitta 切片分類機能の裏側 / Inside toitta's AI-Based Factoid Clustering
pokutuna
0
570
Macとオーディオ再生 2024/11/02
yusukeito
0
150
Dev ContainersとGitHub Codespacesの素敵な関係
ymd65536
1
130
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.1k
推し活の ハイトラフィックに立ち向かう Railsとアーキテクチャ - Kaigi on Rails 2024
falcon8823
6
2.2k
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
GraphQLの誤解/rethinking-graphql
sonatard
66
9.9k
Building Adaptive Systems
keathley
38
2.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
Code Reviewing Like a Champion
maltzj
519
39k
GitHub's CSS Performance
jonrohan
1030
460k
Music & Morning Musume
bryan
46
6.1k
What's in a price? How to price your products and services
michaelherold
243
12k
Bash Introduction
62gerente
608
210k
Statistics for Hackers
jakevdp
796
220k
Navigating Team Friction
lara
183
14k
Transcript
Haskell初心者がHaskellの楽 しさについて語る Zli 追い出しLT2023 s1290035 しんぶんぶん
Haskellって...気持ち良くないですか?
なぜHaskellをやろうと思ったのか • Answer: Rustをもっと深く理解したかったから • Rustの型クラス(Trait)はHaskellに影響を受けている • HaskellをやればRustをもっと理解できるのでは...!?という思いと、純粋関数型 言語に慣れたくてやってみた
AOJのITP1を何問か解いてみた
2_C
Javaで書くと...
Haskellで書くと...
気持ち良い〜〜〜〜〜〜!!!!!
解説 • 1~3行目: モジュールのインポート • 6行目: 標準入力 ◦ getLineで読み込まれた入力を wordsを使って空白区切りでリストにし、
map (read :: String -> Int) でリストの中身をStringからIntに変換 • 7行目: 加工して出力 ◦ sort sでリストを昇順ソート ◦ それをmap showに渡してリストの中身を Stringに変換 ◦ それをunwordsに渡して空白区切りの文字列に変換 ◦ それをputStrLnに渡して出力
2_D
Javaで書くと...
Haskellで書くと...
全体的にスッキリ
3_A
Javaで書くと...
Haskellで書くと...
ん??なんで再帰???
Haskellのループは基本再帰らしい • Haskellにfor文とかwhile文はない • ループ処理を書きたい時は再帰関数を使う • flip fixを使うと手続型っぽい書き方もできるらしい ◦ https://qiita.com/lotz/items/0894079a44e87dc8b73e
いよいよ今日一気持ち良い問題
6_B
まつもと先輩がC++で書くと...
ちゃんと綺麗なコード
これをHaskellで書くとなんと...
Haskellで書くと...
main関数はなんと3行!
コード解説 • 1~4行目: モジュールのimport • 7行目: 入力を全てssに読み込み • 8行目: コアロジック全て
◦ lines ssで入力を改行区切りでリストにする ・・・① ◦ (++) <$> ["S ", "H ", "C ", "D "] <*> map show [1 .. 13] :: [String])で、S1, S2, … D13までのリスト を作成・・・② ◦ //で①と②の差分リストを作成 ◦ そのリストをunlinesに食わせて改行区切りの文字列に変換 ◦ putStrに食わせて出力
気持ち良すぎだろ!!!!!
今後の展望 • すごいH本がまだ2章残ってるので読み切る • HaskellでLispインタプリンタを作る • モナディックパーサーで何か作る • OCamlを履修する(Rustのために) 次回はこのどれかのLTを話す(予定)
みんなもHaskell、やろう!