A Clojure library designed to create deterministic finite state machines.
- Easy to use flat one level state machine.
- Define state machines that can accumulate values.
- Transitions with actions and guards.
- Graphically visualize the resulting state machines.
Refer to the documentation for more details.
Require the fsm-clj core name space.
(:require [fsm-clj.core :refer :all])
Define a simple traffic light state machine.
(defsm traffic-light
[[:green -> :yellow when :to-yellow]
[:yellow -> :red when :to-red]
[:red -> :green when :to-green]])
Sending events.
(-> (traffic-light)
(send-event :to-yellow)
:state) ;; => :yellow
Graphically generate the State Machine (open a Swing viewer).
(show! (traffic-light))
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.