Skip to content
A Clojure library designed to create deterministic finite state machines.
Clojure
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
doc
src/fsm_clj
test/fsm_clj
.gitignore
CHANGELOG.md
LICENSE
README.md
fsm-clj.iml
project.clj

README.md

fsm-clj

Clojars Project

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.

Quick Start

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))

Traffic Light Finite State Machine

License

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

You can’t perform that action at this time.