$30 off During Our Annual Pro Sale. View Details »
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
340
RustのLINEBot SDKを自作した話
shinbunbun_
0
2k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
4.2k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
4.2k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
270
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
570
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
1.9k
IEEE802.1X認証を導入してみた
shinbunbun_
0
300
UBICの食材管理APIを作った話
shinbunbun_
0
230
Other Decks in Programming
See All in Programming
Microservices rules: What good looks like
cer
PRO
0
1.1k
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
490
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.2k
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.3k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
380
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
700
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
120
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
110
SwiftUIで本格音ゲー実装してみた
hypebeans
0
110
Cap'n Webについて
yusukebe
0
120
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
認証・認可の基本を学ぼう後編
kouyuume
0
180
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building Applications with DynamoDB
mza
96
6.8k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Site-Speed That Sticks
csswizardry
13
990
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Thoughts on Productivity
jonyablonski
73
5k
Building an army of robots
kneath
306
46k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
4 Signs Your Business is Dying
shpigford
186
22k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
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、やろう!