功能编程 – 如何在Ocaml中表示简单的有限状态机?

我在C和 Java中编写了一些状态机,但是从来没有使用像OCAML这样的功能语言

问题是我不知道我是否可以从对象语言版本中修改代码,因为在Ocaml中,记录和变体比class更强大;

所以,我需要一个事件驱动的有限状态机(像UML这样的层次结构),容易配置

有人在现场经历过一个简单的样本吗?只是为了避免最常见的陷阱

谢谢 :)

编辑16/03:没有可变状态可以做到吗?
       而且我想以“FSM”的名义正确地封装它,我应该选择一个模块还是一个类?

通常,您创建与自动机的状态相对应的记录,并且您有另一种触发转换到另一状态的事件.在状态记录中,您可以为每个事件找到新的状态.

我们假设你的转换是由字符串触发的:

type event = string

module EventMap = Map.Make(struct
    type t = event
    let compare = compare
  end)

type state = {
  state_info : ...; (* the content of that state, id, comment, etc. *)
  mutable state_transitions : state EventMap.t;
}

let next_state current_state event =
  try
    EventMap.find event current_state.state_transitions
  with Not_found -> current_state

在这里,我认为未知事件保持在同一状态,但您可能在记录中有错误状态…

相关文章
相关标签/搜索