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
Juliaを書いていて「便利だな〜」と 思ってたらスライド出来上がってた
Search
cyokozai
October 15, 2024
1
71
Juliaを書いていて「便利だな〜」と 思ってたらスライド出来上がってた
Julia言語で研究用のコードを書いていたら、結構便利だなと思ったif式のことを話したくなったので書きました。
5分LTだから内容薄いです...
cyokozai
October 15, 2024
Tweet
Share
More Decks by cyokozai
See All by cyokozai
さくらのクラウド AppRun と GitHub Actions でお手軽サーバレス構築
yusuke427
2
110
塩漬けになったVM それ、Kubernetesで動かせますよ
yusuke427
1
200
KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud
yusuke427
1
620
学生プライベートクラウドはKubeVirt の夢を見るか?
yusuke427
1
120
SREについて学ぶスリーシェイクのインターン
yusuke427
1
170
学生サークルで開発するVMプロビジョニングツール
yusuke427
1
110
あした話したくなるSREとPlatform Engineering
yusuke427
2
140
Terraform × cloud-init で VM のセットアップをいい感じにする話
yusuke427
1
2.4k
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
170
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Raft: Consensus for Rubyists
vanstee
141
7.3k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
How to Talk to Developers About Accessibility
jct
2
130
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
170
Measuring & Analyzing Core Web Vitals
bluesmoon
9
750
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
Transcript
Julia を書いていて「便利だな〜」と 思ってたらスライド出来上がってた @cyokozai 関数型プログラミングと便利なif式
はじめに 今回話す内容はおそらく他のモダンな言語でも 同様の機能をサポートしていると思います。 「⚪⚪はJuliaだからできる!」という内容では ありませんのであらかじめご理解ください....。
自己紹介 井上 裕介 a.k.a cyokozai 千葉工業大学 情報科学部 情報工学科 B4 ❏
ネットワークコンテンツ研究会 Nekko Cloud Team ❏ 株式会社スリーシェイク sreake事業部 学生インターン生
アジェンダ • “Hello World!” in Julia • コード書いてた時の悩み • 便利なif式
• ちょっぴり入門 関数型言語
“Hello World!” in Julia println(“Hello World!”)
Python 使ってる?
NumPy 使ってる?
Julia 使ってる?
Julia とは • MITが作ったオープンソースのマルチパラダイム言語 • 自称「欲張りな言語」 • 機械学習、計算科学、工学、物理...科学の現場で大活躍! “Hello World!”
in Julia
Juliaのこと、ますます知りたいですよね? “Hello World!” in Julia 今日はほんの一部分だけお話しします^^
コード書いてた時の 悩み function idea(a,b,c...) return a+b+sum(c) end
私のユースケース • 遺伝的アルゴリズムの研究室 • 提案手法の実装をJuliaで行う • 大量のループ処理 ( 100,000世代 )
• 1,000次元以上のベンチマーク関数 コード書いてた時の悩み
こんなことがしたい コード書いてた時の悩み • 実験手法毎に関数の内容 を変えたい function calc(x, y) if method
== "add" return x + y elseif method == "sub" return x - y end end
こんなことがしたい コード書いてた時の悩み • 実験手法毎に関数の内容 を変えたい • 関数名は同じcalcだけを 使い回したい function calc(x,
y) if method == "add" return x + y elseif method == "sub" return x - y end end
こんなことがしたい コード書いてた時の悩み • 実験手法毎に関数の内容 を変えたい • 関数名は同じcalcだけを 使い回したい • 6桁規模のループ内で毎回
条件分岐をするのは嫌だ function calc(x, y) if method == "add" return x + y elseif method == "sub" return x - y end end
便利なif式 abs1(x) = x >= 0 ? x : -x
if文による条件分岐 便利なif式 • よく見る普通のif文 val = rand(Float64) if val >
0.8 fruit1 = "apple" elseif val > 0.4 fruit1 = "banana" else fruit1 = "melon" end
if文による条件分岐 便利なif式 • よく見る普通のif文 • valの値に応じてfruit1の 値が変化する val = rand(Float64)
if val > 0.8 fruit1 = "apple" elseif val > 0.4 fruit1 = "banana" else fruit1 = "melon" end
if文による条件分岐 便利なif式 • よく見る普通のif文 • valの値に応じてfruit1の 値が変化する • fruit1を条件毎に書くの は冗長
val = rand(Float64) if val > 0.8 fruit1 = "apple" elseif val > 0.4 fruit1 = "banana" else fruit1 = "melon" end
if式による条件分岐 便利なif式 • Juliaのif文は条件が真の ブロックの最終行を返す val = rand(Float64) fruit2 =
if val > 0.8 "apple" elseif val > 0.4 "banana" else "melon" end
if式による条件分岐 便利なif式 • Juliaのif文は条件が真の ブロックの最終行を返す • fruit2は一回書くだけで 先程と同じ処理ができる val =
rand(Float64) fruit2 = if val > 0.8 "apple" elseif val > 0.4 "banana" else "melon" end
さっきのコードをこうしてこうじゃ! 便利なif式 function calc(x, y) if method == "add" return
x + y elseif method == "sub" return x - y end end
さっきのコードをこうしてこうじゃ! 便利なif式 calc = if method == "add" (x, y)
-> x + y elseif method == "sub" (x, y) -> x - y end end function calc(x, y) if method == "add" return x + y elseif method == "sub" return x - y end end
できてよかったこと • ムダな (実行中は論理式の真偽が変化しない) 条件分岐の 実行が最初の一回だけで済む • if文でありがちな冗長な記述を簡潔にかける 便利なif式
ちょっぴり入門 関数型言語 add5 = x -> add(5, x)
Q. なぜこんな芸当ができてしまうのか? ちょっぴり入門 関数型言語
Q. なぜこんな芸当ができてしまうのか? A. Julia が関数型プログラミングをサポートしているから ちょっぴり入門 関数型言語
Q. なぜこんな芸当ができてしまうのか? A. Julia が関数型プログラミングをサポートしているから -> Juliaの関数は第一級関数であるから ちょっぴり入門 関数型言語
第一級関数とはなんぞや? • 値 (String, Int, etc)と関数を同等に扱う -> Juliaでは関数の型(Function)が存在する • 以下の4つの要素を持つ
関数を引数として渡す 関数を変数に代入 関数を戻り値として返す データ構造内での関数 ちょっぴり入門 関数型言語
第一級関数の特徴 ちょっぴり入門 関数型言語 calc = if method == "add" (x,
y) -> x + y elseif method == "sub" (x, y) -> x - y end end • if式は論理式の成立した ブロックの値を返す
第一級関数の特徴 ちょっぴり入門 関数型言語 calc = if method == "add" (x,
y) -> x + y elseif method == "sub" (x, y) -> x - y end end • if式は論理式の成立した ブロックの値を返す • if式の戻り値は無名関数 -> 高階関数っぽい...?
第一級関数の特徴 ちょっぴり入門 関数型言語 calc = if method == "add" (x,
y) -> x + y elseif method == "sub" (x, y) -> x - y end end • if式は論理式の成立した ブロックの値を返す • if式の戻り値は無名関数 -> 高階関数っぽい...? • 関数を変数calcへ代入 -> 第一級関数の特徴!
まとめ • Juliaは速い・書きやすい・楽しいの三拍子! • PythonでNumPy使ってる人には特にオススメ • 関数型プログラミング入門には向いてるかも...? • ぶっちゃけ最近の言語は関数型の要素取り入れてる あまり珍しくもなかったかも...?
今日話さなかった用語一覧 • 高階関数 • 関数型言語 • 三項演算子 • 無名関数 •
多重ディスパッチ • LLVM • JITコンパイル
Thank you for listening!