(* Continuation Semantics *) (* Author: Carsten Schuermann, Adam Poswolsky, Jeffrey Sarnat *) exp> exp -> exp> exp -> exp> exp -> exp> exp) -> exp> exp) -> exp> exp -> exp> initL : -> ( -> ) = fail ; init : (( -> ( -> )) -> -> ) = L |--> |--> ; eval : ( -> ( -> )) -> -> (( -> ( -> )) -> -> ) -> = L |--> ( |--> K |--> eval L (L2 |--> |--> eval L2 (L3 |--> |--> eval L3 K)) | |--> K |--> eval L (L2 |--> |--> eval L2 (L3 |--> |--> K L3 )) | |--> K |--> eval L (L2 |--> |--> eval L2 (L3 |--> |--> K L3 )) | |--> K |--> K L | |--> K |--> {k:cont} case (eval (L | |--> K L) K) of (X |--> pop X) | {{k}} |--> K |--> eval L (X |--> X ) | |--> K |--> K L ); eval'1 = eval initL init; eval'2 = eval initL init; eval'3 = eval initL init; eval'4 = eval initL init; eval'5 = eval initL init; eval'6 = eval initL init; eval'7 = eval initL init; eval'8 = eval initL init ;