Main Content

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 の値が決定される。

関連するトピック