(* Mini-ML evaluator *) (* Executes code a given destinations. *) (* Author: Carsten Schuermann *) (* Expressions and Values *) exp> (* zero *) exp> (* succ *) exp -> (val -> exp) -> exp> (* case *) exp) -> exp> (* lam *) exp -> exp> (* app *) exp) -> exp> (* fix *) (* Destinations *) val> exp) -> val> (* Evaluation *) eval : -> = {{d:exp -> dest}} |--> | {{d:exp -> dest}} |--> | {{d:exp -> dest}} |--> {d' : exp -> dest} case (eval ) of ( |--> pop ) | {{d:exp -> dest}} |--> {d' : exp -> dest} case (eval ) of ( |--> pop (eval ) | |--> pop (eval )) | {{d:exp -> dest}} |--> | {{d:exp -> dest}} |--> {d' : exp -> dest} case (eval ) of ( |--> {d'' : exp -> dest} case (eval ) of ( |--> pop (pop (eval )))) | {{d:exp -> dest}} |--> eval ; evaluate : -> = |--> {d:exp -> dest} case eval of ( |--> pop ) ; (* Examples *) double = ; test1 = evaluate ; test2 = evaluate ; test3 = evaluate ( @ double @ ) ;