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
逆ポーランド記法入門してみた@Kyoto.LT_21
Search
geckour
August 03, 2018
Technology
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
逆ポーランド記法入門してみた@Kyoto.LT_21
geckour
August 03, 2018
More Decks by geckour
See All by geckour
Apollo on Android 悪戦苦闘話
geckour
0
190
ベクターお絵かきのススメ@Kyoto.LT#22
geckour
0
380
Other Decks in Technology
See All in Technology
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
250
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
260
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
140
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
270
KanaAI
shreyas1009
0
130
セルフサービスのオブザーバビリティ基盤をOpenTelemetryで作る / Building a Self-Service Observability Platform with OpenTelemetry
ymotongpoo
3
480
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
キャリアLT今日までそして明日から
kentapapa
1
130
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
250
DORA_Metrics.pdf
wagnerfusca
1
140
ScotSecure West 2026 - Glasgow
raybugg
0
210
AWS FinOps Agent 結局何が得意なの?
siromi
0
220
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Writing Fast Ruby
sferik
630
63k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Optimizing for Happiness
mojombo
378
71k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
A Tale of Four Properties
chriscoyier
163
24k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Crafting Experiences
bethany
1
360
Transcript
逆ポーランド記法入門してみた 2018/08/03 Kyoto.LT#21 石田 智宏 / geckour (フリーター a.k.a. インターン)
自己紹介 • 石田 智宏 (ISHIDA Tomohiro) a.k.a. セロリン • モラトリアム終了間際
(Androidアプリインターン) • 数学とかアルゴリズムとか苦手
そうだ、電卓作ろう • ToDoアプリと並ぶ試作アプリ代表格、電卓 (ソースはない) • ちゃちゃっと簡単に作れそう
そうだ、電卓作ろう • ToDoアプリと並ぶ試作アプリ代表格、電卓 (ソースはない) • ちゃちゃっと簡単に作れそう • 油断するとすぐ複雑化するレイアウト • やっぱ数式入力して計算させたい
• 数式解析のためのアルゴリズムが登場
そうだ、電卓作ろう • 意外とめんどくさいのでは…? • 少しでも楽したい!
ところで RPNって知ってますか?
RPN (逆ポーランド記法) "逆ポーランド記法(ぎゃくポーランドきほう、英語: Reverse Polish Notation, RPN) は、数式やプログラムの記法の一種。演算子を被演算子の後にすることから、 後置記法 (Postfix
Notation) とも言う。" (Wikipedia)
RPN (逆ポーランド記法) "逆ポーランド記法(ぎゃくポーランドきほう、英語: Reverse Polish Notation, RPN) は、数式やプログラムの記法の一種。演算子を被演算子の後にすることから、 後置記法 (Postfix
Notation) とも言う。" (Wikipedia) • 訳:コンピュータで扱いやすい数式とかの記法だよ • 例:(2 + 5) * (13 * 4) → 2 5 + 13 4 + * • なんか良さそう!
やってみようRPN • まずはRPN変換器を作るよ ◦ 式を要素毎に分割してリストを作成 ▪ 例:5 + 2 *
3 → [5, +, 2, *, 3] ◦ 式の要素の重み (優先順位) を決める ▪ 例:数字 → 0 *, / → 1 +, - → 2
やってみようRPN • まずはRPN変換器を作るよ ◦ 重みに応じて並べ替え (スタックを利用する) ▪ 括弧は特別 • 右括弧が出てきたらスタックから左括弧を探す
• 見つかった左括弧から右括弧で挟まれる要素を全てスタックに追加 ▪ スタックのトップと今の要素の重みを比較 • スタックのトップの方が優先度高 → スタックからポップして結果リストに追加 • 今の要素の方が優先度高 → 今の要素をスタックに追加 ▪ 式リストの要素全てに繰り返す ▪ 最後にスタックの内容を逆順で全て結果リストに追加
やってみようRPN • まずはRPN変換器を作るよ ◦ あれ、結局めんどくさくね …?
やってみようRPN • 次にRPN解析器(計算機)を作るよ ◦ さっき作ったリストを順番に回していく ◦ スタックを利用する ▪ 数値 •
問答無用でスタックにプッシュ ▪ その他演算子 • 演算に必要な数値の数だけスタックからポップ • 演算実行 • 演算結果をスタックにプッシュ
やってみようRPN • 次にRPN解析器(計算機)を作るよ ◦ こっちは単純明快だった!
DEMO
まとめ • RPN、書いてしまえば計算簡単 • 書く (変換する) のは結構頭使う • シンプルな分拡張性は高い •
要素の構造化で複雑な計算にも対応可
Fin.