$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
逆ポーランド記法入門してみた@Kyoto.LT_21
Search
geckour
August 03, 2018
Technology
0
340
逆ポーランド記法入門してみた@Kyoto.LT_21
geckour
August 03, 2018
Tweet
Share
More Decks by geckour
See All by geckour
Apollo on Android 悪戦苦闘話
geckour
0
170
ベクターお絵かきのススメ@Kyoto.LT#22
geckour
0
360
Other Decks in Technology
See All in Technology
品質のための共通認識
kakehashi
PRO
3
250
AI活用によるPRレビュー改善の歩み ― 社内全体に広がる学びと実践
lycorptech_jp
PRO
1
200
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
410
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
240
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
120
AWS Bedrock AgentCoreで作る 1on1支援AIエージェント 〜Memory × Evaluationsによる実践開発〜
yusukeshimizu
6
390
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
810
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
450
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
280
世界最速級 memcached 互換サーバー作った
yasukata
0
340
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
480
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
280
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
4 Signs Your Business is Dying
shpigford
186
22k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
KATA
mclloyd
PRO
32
15k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
[SF Ruby Conf 2025] Rails X
palkan
0
510
Typedesign – Prime Four
hannesfritz
42
2.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
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.