(* Translation into cps form *) (* Author: Carsten Schuermann *) sig < exp : type > < app : exp -> exp -> exp > < lam : (exp -> exp) -> exp > < s = lam [x] lam [y] lam [z] app (app x z) (app y z)> < k = lam [x] lam [y] x>; fun cps : ( -> ) -> -> = fn W => (fn => (case ((cps W ), (cps W )) of (, ) => ) | => (case ({} cps ((fn {} (x => ) | [] {} (e => ({} W e) \x)) \x) ) of ({} ) => ) | [] => W x) ; val example1 = cps (fn .) ; val example2 = cps (fn .) ;