Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Haskell初心者がHaskellの楽しさについて語る
Search
Yuto Takamune
February 22, 2023
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Haskell初心者がHaskellの楽しさについて語る
Yuto Takamune
February 22, 2023
More Decks by Yuto Takamune
See All by Yuto Takamune
GPT-3.5 Turbo をファインチューニングして自分のクローンを作った話
shinbunbun_
1
400
RustのLINEBot SDKを自作した話
shinbunbun_
0
2.5k
セキュリティキャンプ2023 Y3分散合意ゼミ 最終発表
shinbunbun_
0
5k
NixOSでもご自宅k8sがしたい!
shinbunbun_
2
5.1k
カーネルレベルでTwitterを禁止しよう
shinbunbun_
0
320
CRDTで始めるコンフリクトしないデータ同期
shinbunbun_
0
730
Rustで楕円曲線暗号の署名アルゴリズムをフルスクラッチ実装してみた話
shinbunbun_
0
2.5k
IEEE802.1X認証を導入してみた
shinbunbun_
0
350
UBICの食材管理APIを作った話
shinbunbun_
0
270
Other Decks in Programming
See All in Programming
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
300
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
140
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
300
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
520
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
720
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
220
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
360
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
400
SREの越境 / SRE Collaboration
y0hgi
2
260
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
190
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
ラッコキーワード サービス紹介資料
rakko
1
5M
Design in an AI World
tapps
1
320
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.8k
Exploring anti-patterns in Rails
aemeredith
4
510
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
430
4 Signs Your Business is Dying
shpigford
187
23k
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、やろう!