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
27
Juliaを書いていて「便利だな〜」と 思ってたらスライド出来上がってた
Julia言語で研究用のコードを書いていたら、結構便利だなと思ったif式のことを話したくなったので書きました。
5分LTだから内容薄いです...
cyokozai
October 15, 2024
Tweet
Share
More Decks by cyokozai
See All by cyokozai
学生サークルで開発するVMプロビジョニングツール
yusuke427
1
22
あした話したくなるSREとPlatform Engineering
yusuke427
2
110
Terraform × cloud-init で VM のセットアップをいい感じにする話
yusuke427
1
1.1k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Music & Morning Musume
bryan
46
6.2k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Building Applications with DynamoDB
mza
91
6.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Code Review Best Practice
trishagee
65
17k
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!