, , :
(defmacro def-state-machine (name (&rest assets) &rest states)
`(defparameter ,name
(list
:assets ',(remove-if-not #'legal-asset? assets)
:states ',(remove-if-not #'legal-state? states))))
( , , - , e , ).
, :
(defmacro def-transition (name args &body body)
`(defun ,name (,@args)
,@body))
. , :
(defun load-toy-state-machine (directory)
(let ((path (cl-fad:merge-pathnames-as-file directory
;(*readtable* (copy-readtable nil))
)
; (make-dispatch-macro-character
(with-open-file (stream path :direction :input)
(do ((form (read stream nil 'done)
(read stream nil 'done)))
((eql form 'done) T)
(if (member (car form) '(def-state-machine def-transition))
(eval form)
(error "malformed state machine definition file"))))))
(def-state-machine def-transition), . .