鉴于这些 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”,我们不必按照拓扑排序定义的顺序进行分配......(例如,state0 是根据 state1 定义的,即使 state1 稍后定义)。
PS 使用字符串作为状态标识符的选项...
stateMachine = {
"0" : { "A":"1", "B":"2"},
"1" : { "B":"3" },
...
...保留无效键的情况(即状态机中的无效消息说明符)。