47 lines
1.2 KiB
Scheme
47 lines
1.2 KiB
Scheme
(module arithmetic mzscheme
|
|
(require "../reduction-semantics.ss"
|
|
"../gui.ss")
|
|
|
|
(define lang
|
|
(language
|
|
(e (binop e e)
|
|
(sqrt e)
|
|
number)
|
|
(binop +
|
|
-
|
|
*
|
|
/)
|
|
|
|
(e-ctxt (binop v e-ctxt)
|
|
(binop e-ctxt e)
|
|
(sqrt e-ctxt)
|
|
hole)
|
|
(v number)))
|
|
|
|
(define-syntax (--> stx)
|
|
(syntax-case stx ()
|
|
[(_ op from to)
|
|
(syntax (reduction/name op
|
|
lang
|
|
(in-hole e-ctxt_1 from)
|
|
(term (in-hole e-ctxt_1 ,to))))]))
|
|
|
|
(define reductions
|
|
(list
|
|
(--> "add"
|
|
(+ number_1 number_2)
|
|
(+ (term number_1) (term number_2)))
|
|
(--> "subtract"
|
|
(- number_1 number_2)
|
|
(- (term number_1) (term number_2)))
|
|
(--> "multiply"
|
|
(* number_1 number_2)
|
|
(* (term number_1) (term number_2)))
|
|
(--> "divide"
|
|
(/ number_1 number_2)
|
|
(/ (term number_1) (term number_2)))
|
|
(--> "sqrt"
|
|
(sqrt number_1)
|
|
(sqrt (term number_1)))))
|
|
|
|
(traces lang reductions '(- (* (sqrt 36) (/ 1 2)) (+ 1 2)))) |