SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
瀬尾佳隆 (y.seo@seosoft.jp)
 Microsoft MVP for Visual C#


            技術ひろば.net 2010年7月
                               1
   瀬尾 佳隆 (せお よしたか)
    ◦ MVP for Visual C# (Jan 2009 – Dec 2010)

    ◦ 実は   Forth 系の言語が大好き!
    ◦ メールは y.seo@seosoft.jp / Twitterは @seosoft
    ◦ 個人事業主です(屋号は瀬尾ソフト)
    ◦ 根っからの開発屋
      インフラ苦手です
    ◦ どうでもいい情報としては、ミュージカルが大好きです




                                                  2
   真面目に聞いていただくセッションではありません
    ◦ 「何か身につく」とか「仕事に役に立つ」とか期待しては
      いけません
     でも、普段とは違う「物の見方」を通して視野を広げる参考になれば
   多分途中で時間切れになります
    ◦ (意図的に)ページ数多すぎ
     そもそも30分でやるようなネタじゃないし w
    ◦ ついうっかり興味を持ってしまった方は資料をダウンロード
      して読んでください




                                        3
   明日の仕事に全く役立たない技術でも
    「楽しければいいじゃん!」ということを理解
    (または同情)していただくこと
   普段とは違う考え方を通して脳のストレッチをして
    いただくこと
   ついうっかり興味を持つ人が一人でも二人でも
    出てくることを密かに期待すること




                              4
   RPN
    ◦   RPNとは
    ◦   RPNの具体例
    ◦   計算機内部の動き
    ◦   RPNの言語的特徴
   Forth
    ◦ Forthとは
    ◦ Forthの基本的な文法
    ◦ (デモ)




                     5
逆ポーランド記法




           6
   RPN = Reverse Polish Notation
    ◦ 逆ポーランド記法
   演算子をオペランドの後ろに記述する方法
    ◦ 後置記法とも言う
    ◦ 皆さんお馴染みなのは中間記法
   HP電卓ではRPNで計算します
    ◦ HP-15Cなんて名機も




                                    7
中置記法                              RPN
1+2                            1 2 +
(1 + 2) * (3 + 4)              1 2 + 3 4 + *
                                    8.33 4 5.2 - * 8.33 7.46 -
8.33 ∗ 4 − 5.2 ÷ 8.33 − 7.46 ∗ 0.32
                                    / 0.32 * 4.3 3.15 2.75 -
  4.3 ∗ 3.15 − 2.75 − (1.71 ∗ 2.01) * 1.71 2.01 * - /




 • 頭から順番に計算できる
 • 括弧がいらない
 • 複雑な式でも1行で表現できる


                                                                 8
   20 4 / の場合・・・20 / 4




       Starting Forth
       http://www.forth.com/starting-forth/sf2/sf2.html
                                                          9
   20 4 / の場合・・・20 / 4




       Starting Forth
       http://www.forth.com/starting-forth/sf2/sf2.html
                                                          10
   3 9 + 4 6 + * の場合・・・(3 + 9) * (4 + 6)




         Starting Forth
         http://www.forth.com/starting-forth/sf2/sf2.html




                                                            11
   3 9 + 4 6 + * の場合・・・(3 + 9) * (4 + 6)




         Starting Forth
         http://www.forth.com/starting-forth/sf2/sf2.html




                                                            12
問題:
太郎君は鉛筆を1本、花子さんは鉛筆を2本持っています。
あわせて何本でしょうか。

    中間記法   1+2       順番が・・・

 鉛筆1本      鉛筆2本    あわせて何本



     RPN   1 2 +    あら、キレイ
                              13
問題:
太郎君は鉛筆を1本、花子さんは鉛筆を2本持っています。
あわせて何本でしょうか。


中間記法           RPN

  1+2           1 2 +
 1 足す 2        1と2を足す
               日本語に似ている!

                              14
RPNに基づくプログラミング言語




                   15
   RPNとデータスタック使用の考え方に基づいた
    プログラミング言語
   言語仕様が非常に簡単
    ◦ ワード(トークン)を辞書中で検索
    ◦ 辞書中に見つかったら関連づけられたコードを実行
    ◦ 見つからなかったら “数” と見なしてスタックに積む
   Forth プログラムは「ワードの並び」
    ◦ Forth ではすべてがワードであり、演算子、制御構造、
      組み込みの手続き、ユーザー定義の手続きの区別がない
    ◦ ワードが順番に並んでいるだけで、構文解析が不要



                                     16
スタック操作       処理
.            スタックの1番目を取り出してコンソール出力
.s           スタックの内容表示(値を取り出さない)
clearstack   スタックのクリア
drop         スタックの1番目を捨てる
dup          スタックの1番目を複製して上に積む
over         スタックの2番目を複製して上に積む
swap         スタックの1番目と2番目とを交換する
rot          スタックの3番目を取り出して上に積む
nip          swap drop と同じ
tuck         swap over と同じ
2drop        drop drop と同じ
2swap        1番目/2番目の組と3番目/4番目の組とを交換する

                                         17
   四則演算
    ◦ + - * / mod ・・・想像通り
   文字列
    ◦ .s” 文字列” ・・・ .s” のあとに半角スペースが必要
   ワード定義
    ◦ : <ワード名> <コード> ;
      コロンで始まりセミコロンで終わる
   制御構造
    ◦ <条件> if <処理> else <処理> then ・・・if文
    ◦ <終値> <初期値> ?do <処理> loop ・・・for文
    ◦ begin <処理> <終了条件> until ・・・while文


                                           18
   変数
    ◦ variable <変数名> ・・・定義
    ◦ <変数名> ! ・・・代入
    ◦ <変数名> @ ・・・参照
   浮動小数
    ◦ f+, f-, f*, f/ など ・・・頭に f を付ける必要がある
    ◦ d>f, f>d ・・・小数化、整数化




                                            19
   時間があれば・・・




                20
今日のまとめと参考情報




              21
   RPN
    ◦ 演算子をオペランドの後ろに記述する
    ◦ 頭から順番に計算していくことができる
    ◦ 日本語の文法に近いので日本人には実は案外理解しやすい
      言語(かも?)
   Forth
    ◦ RPNとデータスタックを使ったプログラミング言語
    ◦ 言語仕様が非常に簡単
    ◦ Forth プログラムは「ワードの並び」




                                   22
   HP-35s が今なら5000円くらいで買えるかも
    ◦ Amazonあたりで検索してください
   Windows上で動作する HP-15Cのエミュレータが
    あります
    ◦ http://www.thgsoft.ch/ThGHome_EN.html#HP15c




                                                    23
   Gforth
    ◦ ANS Forthの実装
    ◦ http://sourceforge.jp/projects/freshmeat_gforth/
   Starting FORTH
    ◦ http://www.forth.com/starting-forth/
   Thinking FORTH
    ◦ http://thinking-forth.sourceforge.net/
   日本語プログラミング言語Mind
    ◦ http://www.scripts-lab.co.jp/mind/whatsmind.html
    ◦ 実は私にとっての Forth とは Mind のこと
   .NET用のForthコンパイラもあります
    ◦ DeltaForth / Forth in the .Net 3.5 Framework (ForthAPI)


                                                                24
25

Contenu connexe

Tendances

プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talkkyon mm
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜Teppei Sato
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門bleis tift
 

Tendances (20)

プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Monad tutorial
Monad tutorialMonad tutorial
Monad tutorial
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
F#によるFunctional Programming入門
F#によるFunctional Programming入門F#によるFunctional Programming入門
F#によるFunctional Programming入門
 

Similaire à Rpn and forth 超入門

2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料Yasutaka Hamada
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20鉄次 尾形
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)Gohryuh
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼうVienosNotes
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたKatsuhiro Endo
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」Takeshi Kiriya
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-streamNaotoshi Seo
 
簡単便利!Laravel Homestead
簡単便利!Laravel Homestead簡単便利!Laravel Homestead
簡単便利!Laravel HomesteadShota Inoue
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'Yamamura Takashi
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳Shinichiro Niiyama
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式pocketberserker
 

Similaire à Rpn and forth 超入門 (20)

2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料2012/03/31 Apacheスタートスクリプト読書会発表資料
2012/03/31 Apacheスタートスクリプト読書会発表資料
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Yaminabe fortran
Yaminabe fortranYaminabe fortran
Yaminabe fortran
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
 
Ruby紹介(pdf)
Ruby紹介(pdf)Ruby紹介(pdf)
Ruby紹介(pdf)
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼう
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
 
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
わんくま東京#38 LT 「Func&lt;> と ref / out 小咄」
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
 
簡単便利!Laravel Homestead
簡単便利!Laravel Homestead簡単便利!Laravel Homestead
簡単便利!Laravel Homestead
 
リーダブルコード 1.0'
リーダブルコード 1.0'リーダブルコード 1.0'
リーダブルコード 1.0'
 
ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳ハードウェア脳とソフトウェア脳
ハードウェア脳とソフトウェア脳
 
F#のコンピュテーション式
F#のコンピュテーション式F#のコンピュテーション式
F#のコンピュテーション式
 

Plus de Yoshitaka Seo

言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認Yoshitaka Seo
 
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021Yoshitaka Seo
 
AI-900 ポイント解説
AI-900 ポイント解説AI-900 ポイント解説
AI-900 ポイント解説Yoshitaka Seo
 
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021Yoshitaka Seo
 
AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方Yoshitaka Seo
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Yoshitaka Seo
 
誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代Yoshitaka Seo
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
API ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリAPI ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリYoshitaka Seo
 
Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)Yoshitaka Seo
 
BIerのためのAI入門
BIerのためのAI入門BIerのためのAI入門
BIerのためのAI入門Yoshitaka Seo
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析Yoshitaka Seo
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理Yoshitaka Seo
 
Custom Visionを活用するためのTips
Custom Visionを活用するためのTipsCustom Visionを活用するためのTips
Custom Visionを活用するためのTipsYoshitaka Seo
 
Machine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみようMachine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみようYoshitaka Seo
 
Bot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごいBot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごいYoshitaka Seo
 
VS Code Tools for AI の紹介
VS Code Tools for AI の紹介VS Code Tools for AI の紹介
VS Code Tools for AI の紹介Yoshitaka Seo
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUISYoshitaka Seo
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門Yoshitaka Seo
 

Plus de Yoshitaka Seo (20)

言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
言語系サービスの統合ポータル Language Studio で Microsoft AI を再確認
 
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
Arduino で組み込み開発 - 京都TECH オープンキャンパス2021
 
AI-900 ポイント解説
AI-900 ポイント解説AI-900 ポイント解説
AI-900 ポイント解説
 
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
AI プログラミング - OCA / 京都TECH オープンキャンパス 2021
 
AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方AIの見方、AIとの付き合い方
AIの見方、AIとの付き合い方
 
Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類Custom Visionで仏像を画像分類
Custom Visionで仏像を画像分類
 
誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代誰もが AI を使う時代、作る時代
誰もが AI を使う時代、作る時代
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
API ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリAPI ペタペタしただけのお手軽 感情分析アプリ
API ペタペタしただけのお手軽 感情分析アプリ
 
Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)Machine Learning studio で構造化データから予測分析 (LT版)
Machine Learning studio で構造化データから予測分析 (LT版)
 
BIerのためのAI入門
BIerのためのAI入門BIerのためのAI入門
BIerのためのAI入門
 
構造化データをツールで簡単に分析
構造化データをツールで簡単に分析構造化データをツールで簡単に分析
構造化データをツールで簡単に分析
 
チャットボットの自然言語処理
チャットボットの自然言語処理チャットボットの自然言語処理
チャットボットの自然言語処理
 
Custom Visionを活用するためのTips
Custom Visionを活用するためのTipsCustom Visionを活用するためのTips
Custom Visionを活用するためのTips
 
Machine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみようMachine Learning Serviceを使ってみよう
Machine Learning Serviceを使ってみよう
 
Bot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごいBot Framework Emulator はこんなにすごい
Bot Framework Emulator はこんなにすごい
 
VS Code Tools for AI の紹介
VS Code Tools for AI の紹介VS Code Tools for AI の紹介
VS Code Tools for AI の紹介
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 
QnA Maker 逆入門
QnA Maker 逆入門QnA Maker 逆入門
QnA Maker 逆入門
 
PowerApps アプリ開発入門
PowerApps アプリ開発入門PowerApps アプリ開発入門
PowerApps アプリ開発入門
 

Dernier

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Dernier (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Rpn and forth 超入門

  • 1. 瀬尾佳隆 (y.seo@seosoft.jp) Microsoft MVP for Visual C# 技術ひろば.net 2010年7月 1
  • 2. 瀬尾 佳隆 (せお よしたか) ◦ MVP for Visual C# (Jan 2009 – Dec 2010) ◦ 実は Forth 系の言語が大好き! ◦ メールは y.seo@seosoft.jp / Twitterは @seosoft ◦ 個人事業主です(屋号は瀬尾ソフト) ◦ 根っからの開発屋  インフラ苦手です ◦ どうでもいい情報としては、ミュージカルが大好きです 2
  • 3. 真面目に聞いていただくセッションではありません ◦ 「何か身につく」とか「仕事に役に立つ」とか期待しては いけません  でも、普段とは違う「物の見方」を通して視野を広げる参考になれば  多分途中で時間切れになります ◦ (意図的に)ページ数多すぎ  そもそも30分でやるようなネタじゃないし w ◦ ついうっかり興味を持ってしまった方は資料をダウンロード して読んでください 3
  • 4. 明日の仕事に全く役立たない技術でも 「楽しければいいじゃん!」ということを理解 (または同情)していただくこと  普段とは違う考え方を通して脳のストレッチをして いただくこと  ついうっかり興味を持つ人が一人でも二人でも 出てくることを密かに期待すること 4
  • 5. RPN ◦ RPNとは ◦ RPNの具体例 ◦ 計算機内部の動き ◦ RPNの言語的特徴  Forth ◦ Forthとは ◦ Forthの基本的な文法 ◦ (デモ) 5
  • 7. RPN = Reverse Polish Notation ◦ 逆ポーランド記法  演算子をオペランドの後ろに記述する方法 ◦ 後置記法とも言う ◦ 皆さんお馴染みなのは中間記法  HP電卓ではRPNで計算します ◦ HP-15Cなんて名機も 7
  • 8. 中置記法 RPN 1+2 1 2 + (1 + 2) * (3 + 4) 1 2 + 3 4 + * 8.33 4 5.2 - * 8.33 7.46 - 8.33 ∗ 4 − 5.2 ÷ 8.33 − 7.46 ∗ 0.32 / 0.32 * 4.3 3.15 2.75 - 4.3 ∗ 3.15 − 2.75 − (1.71 ∗ 2.01) * 1.71 2.01 * - / • 頭から順番に計算できる • 括弧がいらない • 複雑な式でも1行で表現できる 8
  • 9. 20 4 / の場合・・・20 / 4 Starting Forth http://www.forth.com/starting-forth/sf2/sf2.html 9
  • 10. 20 4 / の場合・・・20 / 4 Starting Forth http://www.forth.com/starting-forth/sf2/sf2.html 10
  • 11. 3 9 + 4 6 + * の場合・・・(3 + 9) * (4 + 6) Starting Forth http://www.forth.com/starting-forth/sf2/sf2.html 11
  • 12. 3 9 + 4 6 + * の場合・・・(3 + 9) * (4 + 6) Starting Forth http://www.forth.com/starting-forth/sf2/sf2.html 12
  • 13. 問題: 太郎君は鉛筆を1本、花子さんは鉛筆を2本持っています。 あわせて何本でしょうか。 中間記法 1+2 順番が・・・ 鉛筆1本 鉛筆2本 あわせて何本 RPN 1 2 + あら、キレイ 13
  • 16. RPNとデータスタック使用の考え方に基づいた プログラミング言語  言語仕様が非常に簡単 ◦ ワード(トークン)を辞書中で検索 ◦ 辞書中に見つかったら関連づけられたコードを実行 ◦ 見つからなかったら “数” と見なしてスタックに積む  Forth プログラムは「ワードの並び」 ◦ Forth ではすべてがワードであり、演算子、制御構造、 組み込みの手続き、ユーザー定義の手続きの区別がない ◦ ワードが順番に並んでいるだけで、構文解析が不要 16
  • 17. スタック操作 処理 . スタックの1番目を取り出してコンソール出力 .s スタックの内容表示(値を取り出さない) clearstack スタックのクリア drop スタックの1番目を捨てる dup スタックの1番目を複製して上に積む over スタックの2番目を複製して上に積む swap スタックの1番目と2番目とを交換する rot スタックの3番目を取り出して上に積む nip swap drop と同じ tuck swap over と同じ 2drop drop drop と同じ 2swap 1番目/2番目の組と3番目/4番目の組とを交換する 17
  • 18. 四則演算 ◦ + - * / mod ・・・想像通り  文字列 ◦ .s” 文字列” ・・・ .s” のあとに半角スペースが必要  ワード定義 ◦ : <ワード名> <コード> ;  コロンで始まりセミコロンで終わる  制御構造 ◦ <条件> if <処理> else <処理> then ・・・if文 ◦ <終値> <初期値> ?do <処理> loop ・・・for文 ◦ begin <処理> <終了条件> until ・・・while文 18
  • 19. 変数 ◦ variable <変数名> ・・・定義 ◦ <変数名> ! ・・・代入 ◦ <変数名> @ ・・・参照  浮動小数 ◦ f+, f-, f*, f/ など ・・・頭に f を付ける必要がある ◦ d>f, f>d ・・・小数化、整数化 19
  • 20. 時間があれば・・・ 20
  • 22. RPN ◦ 演算子をオペランドの後ろに記述する ◦ 頭から順番に計算していくことができる ◦ 日本語の文法に近いので日本人には実は案外理解しやすい 言語(かも?)  Forth ◦ RPNとデータスタックを使ったプログラミング言語 ◦ 言語仕様が非常に簡単 ◦ Forth プログラムは「ワードの並び」 22
  • 23. HP-35s が今なら5000円くらいで買えるかも ◦ Amazonあたりで検索してください  Windows上で動作する HP-15Cのエミュレータが あります ◦ http://www.thgsoft.ch/ThGHome_EN.html#HP15c 23
  • 24. Gforth ◦ ANS Forthの実装 ◦ http://sourceforge.jp/projects/freshmeat_gforth/  Starting FORTH ◦ http://www.forth.com/starting-forth/  Thinking FORTH ◦ http://thinking-forth.sourceforge.net/  日本語プログラミング言語Mind ◦ http://www.scripts-lab.co.jp/mind/whatsmind.html ◦ 実は私にとっての Forth とは Mind のこと  .NET用のForthコンパイラもあります ◦ DeltaForth / Forth in the .Net 3.5 Framework (ForthAPI) 24
  • 25. 25