これらの F# 型宣言を考えると...
type Message =
| MessageA
| MessageB
| MessageC
| MessageD
type State = {
Name:string
NextStateMap: Map<Message,State>
}
...この特定の状態機械の同等に表現力豊かな定義はありますか...
let rec state0 = { Name = "0"; NextStateMap = Map.ofList [ (MessageA,state1); (MessageB,state2)] }
and state1 = { Name = "1"; NextStateMap = Map.ofList [ (MessageB,state3)] }
and state2 = { Name = "2"; NextStateMap = Map.ofList [ (MessageA,state3)] }
and state3 = { Name = "3"; NextStateMap = Map.ofList [ (MessageC,state4)] }
and state4 = { Name = "4"; NextStateMap = Map.ofList [ (MessageD,state5)] }
and state5 = { Name = "5"; NextStateMap = Map.empty}
...Pythonで?
「rec」を介して、トポロジカルソートで定義された順序で割り当てを行う必要がないことに注意してください... (たとえば、state1 は後で定義されますが、state0 は state1 に関して定義されます)。
PS文字列を状態識別子として使用するオプション...
stateMachine = {
"0" : { "A":"1", "B":"2"},
"1" : { "B":"3" },
...
...無効なキー (つまり、ステート マシンの無効なメッセージ指定子) のケースを開いたままにします。