SlideShare a Scribd company logo
状態遷移機械を構成するための新しい
イベントコンビネーターの提案
(PPL2014 カテ3ポスター)

2014年3月7日

小笠原

Copyright© 2013 IT Planning,Inc All rights reserved.

啓
既存のイベントコンビネーター達


map:’a event -> (‘a -> ‘b) -> ‘b event




merge:’a event list -> ‘a event




イベントを条件に適合するもののみに限定。

until:’a event -> ‘b event -> ‘b event




二つのイベントの括りだし。

filter:’a event -> (‘a -> bool) -> ‘a event




畳み込み変換

zip: ‘a event -> ‘b event -> (‘a, ‘b) event




発生しないイベント。

fold: (‘a -> ‘b -> ‘a) -> ‘a -> ‘b event -> ‘a event




重ね合わせる。

never: ‘a event




変換する。

条件が満たされている間イベントを取得。

switch: ‘a event event -> ‘a event


イベントのイベントを使ってイベントを切り替える。
SWITCHコンビネーターの動作イメージ
switch eeの挙動

‘a event event

‘a event

e v, v, v, v, v, v, ….
e’ v, v, v, v, ….
1.
2.
3.

‘a event eventからイベントeが発生す
る。
eで発生したイベント値vがswitch ee
のイベント値として観測される。
次のイベントe’が発生したら、e’の発
生させたイベント値vがswitch eeのイ
ベント値として観測される。
SWITCHコンビネーターの利用法


let (>>=) m f = switch (map f m)とすると、ドラッグ
アンドドロップイベント(画面内)は次のように記述
できる。

mouseDown >>=
(fun _ → E.until mouseUp mouseMove)

と書ける。mouseDownの後、mouseUpがあるまで
mouseMoveを観測イベントと解釈できる。
 この例では、(>>=)は「~イベントが起きた後に」
のような意味を実現している。

SWITCHの誤用


キーボードイベントから↑↑↓↓←→BAを取りたいとする
と?

同じイベントをswitchすると、
key >>=
両方切り替わってしまって「~イベントの
(fun k →
後で」という意味を作れなくなってしまう。
if k <> UP then never
else key >>= (fun k →
if k <> UP then never
else key >>= (fun k →
if k <> DOWN then never
else key >>= …. )))



(>>=)の左側と無名関数内部に同じイベントを使っても、
「~イベントの後で」を意味するコンビネーターは作れ
ないか?
新しいイベントコンビネーターの提案


nswitch: ‘a event event -> ‘a event
型はswitchと同じ。
 イベントのイベントからイベントeが発生したら、eが終わる
まで次のイベントに切り替わらないswitch。
 このコンビネーターを使ってnswitch (map f m)を定義する
と、↑↑↓↓←→BAを先の作り方で作れるようになる。




choose: ‘a event list -> ‘a event
型はmergeと同じ。
 指定されたイベントのリストの中で最初に発生したイベント
eが終わるまでそのイベントの発生を取り続け、リストの中
の残りのイベント発生は無視し、eが終わったら次に発生し
たイベントをまた終わるまで取るという挙動をする。
 このコンビネーターがあれば、互いに排他的なイベントを作
ることができ、nswitchと合わせて状態遷移機械を簡潔に記述
できるようになる。

簡略電卓の状態遷移図
メモリ1とメモリ2の演算

数字(0から9)と
演算子(+のみ)が
ある電卓を考える。
 数字が押されたらメ
モリ1に数字を追加
する(メモリ*10+押
された数字)
 演算子が押されたら
メモリ1とメモリ2
で演算する。


演算子(+)

演算子(+)

数字押下

数字押下
123
メモリ1

初期状態
0
兼
メモリ2 数字追加状態
NSWITCH, CHOOSEによる簡略電卓の実装
let memory1event =
E.choose [
op >>= (fun _ -> E.once number);
E.map (fun n -> (S.read m2) * 10 + n) number;
]

メモリ1とメモリ2
の挙動をイベント
コンビネーターの
組み合わせで表
現。
 nswitchとchoose
のおかげでフラグ
一切不要。


let memory2event =
let calc o =
o (S.read m1) (S.read m2)
in
op >>= (fun o ->
E.cons (calc o) (E.map calc op)
+> E.until number)
まとめ
switchは「~イベントの後で」という意味をあらわ
さない場合がある。
 nswitchやchooseを使うと状態遷移機械を背後に持
つ状態の動作を簡潔に記述できる。


More Related Content

More from 啓 小笠原

Alloy論理データモデル
Alloy論理データモデルAlloy論理データモデル
Alloy論理データモデル
啓 小笠原
 
函数プログラミングの エッセンスと考え方
函数プログラミングのエッセンスと考え方函数プログラミングのエッセンスと考え方
函数プログラミングの エッセンスと考え方
啓 小笠原
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
啓 小笠原
 
Alloy analyzer
Alloy analyzerAlloy analyzer
Alloy analyzer
啓 小笠原
 
Alloy Analyzer LT
Alloy Analyzer LTAlloy Analyzer LT
Alloy Analyzer LT
啓 小笠原
 
ぱわわっぷOCaml
ぱわわっぷOCamlぱわわっぷOCaml
ぱわわっぷOCaml啓 小笠原
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
 
GADTブランチの今
GADTブランチの今GADTブランチの今
GADTブランチの今啓 小笠原
 

More from 啓 小笠原 (8)

Alloy論理データモデル
Alloy論理データモデルAlloy論理データモデル
Alloy論理データモデル
 
函数プログラミングの エッセンスと考え方
函数プログラミングのエッセンスと考え方函数プログラミングのエッセンスと考え方
函数プログラミングの エッセンスと考え方
 
線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる線形型のある言語でLEDを光らせる
線形型のある言語でLEDを光らせる
 
Alloy analyzer
Alloy analyzerAlloy analyzer
Alloy analyzer
 
Alloy Analyzer LT
Alloy Analyzer LTAlloy Analyzer LT
Alloy Analyzer LT
 
ぱわわっぷOCaml
ぱわわっぷOCamlぱわわっぷOCaml
ぱわわっぷOCaml
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
GADTブランチの今
GADTブランチの今GADTブランチの今
GADTブランチの今
 

Recently uploaded

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (14)

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

状態遷移機械を構成するための新しいイベントコンビネーターの提案(PPL2014 カテ3ポスター)