(module cc mzscheme (require (lib "reduction-semantics.ss" "reduction-semantics") (lib "iswim.ss" "reduction-semantics" "examples") (lib "gui.ss" "reduction-semantics")) (define cc1 (reduction iswim-grammar (side-condition ((M_1 M_2) : (in-hole E_1 ||)) (not (V? M_1))) `(,M_1 : ,(replace E_1 hole `(|| ,M_2))))) (define cc2 (reduction iswim-grammar (side-condition ((V_1 M_2) : (in-hole E_1 ||)) (not (V? M_2))) `(,M_2 : ,(replace E_1 hole `(,V_1 ||))))) (define cc3 (reduction iswim-grammar (side-condition ((on_1 V_s ... M_1 M_s ...) : (in-hole E_1 ||)) (not (V? M_1))) `(,M_1 : ,(replace E_1 hole `(,on_1 ,@V_s || ,@M_s))))) (define cc5 (reduction iswim-grammar (V_1 : (in-hole E_1 (|| M_2))) `((,V_1 ,M_2) : ,(replace E_1 hole '||)))) (define cc6 (reduction iswim-grammar (V_1 : (in-hole E_1 (on_1 V_s ... || M_s ...))) `((,on_1 ,@V_s ,V_1 ,@M_s) : ,(replace E_1 hole '||)))) (define cc4 (reduction iswim-grammar (V_1 : (in-hole E_1 (V_2 ||))) `((,V_2 ,V_1) : ,(replace E_1 hole '||)))) (define ccbeta (reduction iswim-grammar ((("lam" X_1 M_1) V_1) : (in-hole E_1 ||)) `(,(iswim-subst M_1 X_1 V_1) : ,E_1))) (define ccdelta (reduction iswim-grammar ((on_1 V_s ...) : (in-hole E_1 ||)) ;; Note: delta*n always succeeds due to grammar restrictions `(,(delta*n on_1 V_s) : ,E_1))) (define :->cc (list cc1 cc2 cc3 cc4 cc5 cc6 ccbeta ccdelta)) (define (run-example) (initial-font-size 18) (gui iswim-grammar :->cc `((("lam" x ("+" 10 ("-" 11 x))) (("lam" z z) 12)) : ||))))