Create a gist now

Instantly share code, notes, and snippets.

(fn [{:keys [states start accepts transitions]}]
((fn words [queue]
(lazy-seq
(when-let [[[state path] & queue] (seq queue)]
(let [more-work (for [[letter state] (transitions state)]
[state (conj path letter)])]
`(~@(when (accepts state)
[(apply str path)])
~@(words (doall (concat queue more-work))))))))
[[start []]]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment