3

いくつかの c**p SM コードで立ち往生しているときに、さらなる入力を引き起こすアクションを実行するステート マシンの名前があるのだろうかと考えてしまいました。たとえば、遷移時のアクションが生成されるStart--(PowerOn)-->Initialized 可能性がPlayあり、ステート マシンは入力として Play を取得し、遷移を実行しInitialized--(Play) -->Playingます。したがって、この種のマシンの名前が必要なので、通常の SM (別名、入力に応じて遷移を行う SM) と見なすものに変えることができます。遷移に対する ofc アクションも、終了しない限り問題ありません。入力に影響します)。

これは抽象的すぎます。メッセージを送受信する「SM」があります。問題は、送信部分が入力として処理されるよりも返信を引き起こすことです。これにより、マシンの動作を推測することが難しくなり、コードの変更が難しくなります。

4

2 に答える 2

3

それらの名前は次のとおりです。

再帰ステート マシン (RSM)。

詳細については、http://research.microsoft.com/en-us/um/people/pg/public_psfiles/toplas2005.pdfを参照してください。

于 2012-11-23T18:51:15.733 に答える
0

ステートマシンが自分自身を再帰的に呼び出すことが心配な場合は、次のようにします。

コメントでリンクした記事で提案されているようにステートマシンを実装すると、Moore スタイルの出力関数、Mealy スタイルの出力関数、遷移関数、および次の状態決定関数が得られます。

次に、これをキューイング手法と組み合わせることができます。Ambroz Bizjak長いスタック オーバーフロー ポストまたはより短い (ただしより簡潔な) ポストで説明しているように、programmers.stackexchange ポストはマシンへの着信入力をキューに入れ、マシン遷移関数をループさせ、このキューで入力を待っているブロック。遷移関数を直接呼び出すのではなく、マシンへのすべての入力をキューに入れる必要があります。そうすれば、新しい入力が発生する原因となる出力は、再帰的な遷移呼び出しを行うのではなく、入力をキューに入れます。

また、マシンを送信マシンと受信マシンに分割して、一種のu構造にすることもできます。

   input        output
     |             ^
     v             |
+---------+   +---------+
|   rx    |   |   tx    |
| machine |-->| machine |
+---------+   +---------+

これは、ロジックを少し分離するのに役立ちます。これは過去に私のために働いていました。

このシナリオの名前は?私は何も知りません。

于 2012-11-19T21:59:41.137 に答える