From: Clinton Ebadi Date: Mon, 24 Nov 2014 02:53:05 +0000 (-0500) Subject: Painfully trivial automata X-Git-Url: http://git.hcoop.net/clinton/scratch.git/commitdiff_plain/0bbcd8e73c8a9844644f0c7bb4906104883a38ae?hp=ae6cd47aa12063bed94fe165fe6fedaa92ff69fd Painfully trivial automata --- diff --git a/automata.scm b/automata.scm new file mode 100644 index 0000000..ba77998 --- /dev/null +++ b/automata.scm @@ -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)))) + +