[PRL] fresh variables in call/cc

Dave Herman dherman at ccs.neu.edu
Mon Mar 12 10:28:02 EDT 2007


IIRC, a common way to specify call/cc operationally is by turning the 
captured continuation back into an ordinary expression:

     e ::= x | \x.e | (e e) | (call/cc e) | (abort e)
     v ::= \x.e
     E ::= [] | (E e) | (v E)

     E[\x.e v]    -> E[e[v/x]]
     E[call/cc v] -> E[v[\z.abort(E[z])]]  (z fresh w.r.t. E)
     E[abort e]   -> e

Is the freshness condition necessary for the call/cc rule? It looked 
"obvious" to me, since you don't want the variable representing the hole 
to be captured, but I can't see *how* it could be captured. AFAICT, you 
can't put the hole under a binder in this language, and rightly so; we 
don't evaluate under binders. (After all, to quote Olin, "binders 
dominate references.")

Dave




More information about the PRL mailing list