Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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) を定義する。

  • 入力値 coin に基づいて、出力 (飲料缶が放出されるかどうか) が判定される。

関連するトピック