[trivial automata clinton@unknownlamer.org**20091028174621 Ignore-this: 193622b3db42a3424035581ceba2a0e3 ] addfile ./automata.scm hunk ./automata.scm 1 +(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)))) + +