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
210
Haskell初心者がHaskellの楽しさについて語る
Yuto Takamune
February 22, 2023
Tweet
Share
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
1
350
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.1k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
4.3k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
4.3k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
280
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
590
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2k
IEEE802.1X認証を導入してみた
shinbunbun_
0
300
UBICの食材管理APIを作った話
shinbunbun_
0
240
Other Decks in Programming
See All in Programming
ゆくKotlin くるRust
exoego
1
200
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
770
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
300
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
320
gunshi
kazupon
1
140
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
140
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
470
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
170
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
890
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Making Projects Easy
brettharned
120
6.5k
Embracing the Ebb and Flow
colly
88
4.9k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
How to train your dragon (web standard)
notwaldorf
97
6.5k
The Cult of Friendly URLs
andyhume
79
6.8k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
410
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
63
The SEO Collaboration Effect
kristinabergwall1
0
320
AI: The stuff that nobody shows you
jnunemaker
PRO
1
160
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、やろう!