#lang racket/base (require redex) (require racket/match) (require racket/pretty) (provide quasi-trace) (define (quasi-trace R boot-term) (let loop ((count 0) (t boot-term)) (write (list 'STATE count t)) (newline) (match (apply-reduction-relation/tag-with-names R t) ['() (pretty-write (list 'FINALSTATE count t)) t] [(list (list rulename t1)) (write (list 'STEP count rulename)) (newline) (loop (+ count 1) t1)] [results (pretty-write (list 'NONDETERMINISTM count t results)) (flush-output) (error 'quasi-trace "Nondeterministic evaluation detected.")])))