Mealy のセマンティクスを使用した自動販売機のモデル化
この例では、Mealy のセマンティクスを使用して自動販売機をモデル化する方法を説明します。Mealy チャートは、ステート内ではなく、遷移内でのみ出力を計算します。詳細については、Mealy チャートを設計する際の注意事項を参照してください。
Mealy の自動販売機ロジック
この例では、自動販売機は飲料缶の代価として 15 セントを要求します。購入者は 5 セント硬貨または 10 セント硬貨を 1 枚ずつ自動販売機に投入して、飲料缶を購入します。出力 soda
は入力 coin と現在のステートによって確定するため、このチャートの動作は Mealy マシンと同様になります。
got_0
— 硬貨は投入されていないか、残っていない状態です。
5 セント硬貨が投入された場合は (
coin == 1
)、出力soda
は 0 のままですが、ステートgot_nickel
がアクティブになります。10 セント硬貨が投入された場合は (
coin == 2
)、出力soda
は 0 のままですが、ステートgot_dime
がアクティブになります。入力 coin が 10 セント硬貨または 5 セント硬貨でない場合は、ステート
got_0
がアクティブなままであり、飲料缶は放出されません (出力soda = 0
)。
got_nickel
— 5 セント硬貨が投入されました。
5 セント硬貨がもう 1 個投入されると (
coin == 1
)、ステートgot_dime
がアクティブになりますが、飲料缶は放出されません (soda
は 0 のまま)。10 セント硬貨が投入された場合は (
coin == 2
)、飲料缶が放出されます (soda = 1
)。硬貨は保管され、残りの硬貨は存在しないため、アクティブ ステートはgot_0
になります。入力 coin が 10 セント硬貨または 5 セント硬貨でない場合は、ステート
got_nickel
がアクティブなままであり、飲料缶は放出されません (出力soda = 0
)。
got_dime
— 10 セント硬貨が投入されました。
5 セント硬貨が投入された場合は (
coin == 1
)、飲料缶が放出されます (soda = 1
)。硬貨は保管され、残りの硬貨は存在しないため、アクティブ ステートはgot_0
になります。10 セント硬貨が投入された場合は (
coin == 2
)、飲料缶が放出されます (soda = 1
)。15 セント分の硬貨が保管され、5 セント硬貨 (釣り銭) が存在するため、アクティブ ステートはgot_nickel
になります。入力 coin が 10 セント硬貨または 5 セント硬貨でない場合は、ステート
got_dime
がアクティブなままであり、飲料缶は放出されません (出力soda = 0
)。
Mealy の自動販売機の設計ルール
上記の Mealy 自動販売機の例は、以下の Mealy の設計ルールを示しています。
チャートは、条件アクションに基づいて出力を計算する。
ステート アクションまたは遷移アクションは存在しない。
入力
coin
の値に基づいて、出力soda
の値が決定される。