+(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))))
+
+