(import "sets.slime") (import "automata.slime") ;; (make-delta ;; ("q0" :: "M" -> "q1") ;; ("q1" :: "A" -> "q0" ;; "G" -> "q1") ;; ("q2" :: "E" -> "q0")) (define (delta q s) (cond (s (case q (("q0") (case s (("M") "q1"))) (("q1") (case s (("A") "q0") (("G") "q2"))) (("q2") (case s (("E") "q0"))))) (else q))) (define aut (automata::make-dfa (set::make "q0" "q1" "q2") (set::make "M" "A" "G" "E") delta "q0" (set::make "q0"))) (let ((state (aut ()))) (assert (= (car state) :accept)) (assert (= (car (cdr state)) "q0"))) (let ((state (aut "M"))) (assert (= (car state) :fail)) (assert (= (car (cdr state)) "q1"))) (let ((state (aut "A"))) (assert (= (car state) :accept)) (assert (= (car (cdr state)) "q0"))) (let ((state (aut "M"))) (assert (= (car state) :fail)) (assert (= (car (cdr state)) "q1"))) (let ((state (aut "G"))) (assert (= (car state) :fail)) (assert (= (car (cdr state)) "q2"))) (let ((state (aut "E"))) (assert (= (car state) :accept)) (assert (= (car (cdr state)) "q0")))