(module scc mzscheme (require (lib "reduction-semantics.ss" "reduction-semantics") (lib "iswim.ss" "reduction-semantics" "examples") (lib "gui.ss" "reduction-semantics")) (define scc1 (reduction iswim-grammar ((M_1 M_2) : (in-hole E_1 ||)) `(,M_1 : ,(replace E_1 hole `(|| ,M_2))))) (define scc2 (reduction iswim-grammar ((on_1 M_1 M_s ...) : (in-hole E_1 ||)) `(,M_1 : ,(replace E_1 hole `(,on_1 || ,@M_s))))) (define scc3 (reduction iswim-grammar (V_1 : (in-hole E_1 (("lam" X_1 M_1) ||))) `(,(iswim-subst M_1 X_1 V_1) : ,(replace E_1 hole '||)))) (define scc4 (reduction iswim-grammar (V_1 : (in-hole E_1 (|| M_2))) `(,M_2 : ,(replace E_1 hole `(,V_1 ||))))) (define scc5 (reduction iswim-grammar (V_1 : (in-hole E_1 (on_1 V_s ... ||))) ;; Note: delta*n always succeeds due to grammar restrictions `(,(delta*n on_1 (append V_s (list V_1))) : ,(replace E_1 hole `||)))) (define scc6 (reduction iswim-grammar (V_1 : (in-hole E_1 (on_1 V_s ... || M_1 M_s ...))) `(,M_1 : ,(replace E_1 hole `(,on_1 ,@V_s ,V_1 || ,@M_s))))) (define :->scc (list scc1 scc2 scc3 scc4 scc5 scc6)) (define (run-example) (gui iswim-grammar :->scc `((("lam" x ("+" 10 ("-" 11 x))) (("lam" z z) 12)) : ||))))