Painfully trivial automata
authorClinton Ebadi <clinton@unknownlamer.org>
Mon, 24 Nov 2014 02:53:05 +0000 (21:53 -0500)
committerClinton Ebadi <clinton@unknownlamer.org>
Mon, 24 Nov 2014 02:53:05 +0000 (21:53 -0500)
automata.scm [new file with mode: 0644]

diff --git a/automata.scm b/automata.scm
new file mode 100644 (file)
index 0000000..ba77998
--- /dev/null
@@ -0,0 +1,27 @@
+(use-modules (srfi srfi-9)
+            (srfi srfi-1))
+
+(define (next-token stream)
+  (if (pair? stream)
+      (car stream)))
+
+(define (transition machine state)
+  ((cdr (assoc state (cdr machine)))
+   (cons (if (pair? (car machine)) (cdr (car machine)))
+        (cdr machine))
+   (next-token (car machine))))
+
+(define (run-machine machine initial-state stream)
+  (transition (cons stream machine) initial-state))
+
+(define cadr-machine
+  `((init . ,(lambda (m v) (case v
+                      ((#\c) (transition m 'more))
+                      (else #f))))
+    (more . ,(lambda (m v) (case v
+                      ((#\a #\d) (transition m 'more))
+                      ((#\r) (transition m 'end))
+                      (else #f))))
+    (end . ,(lambda (m v) #t))))
+
+