How does this call/cc expression work?

163 views Asked by At

I am trying this on Racket and it gives out the answer as 5. But I cannot seem to figure out how it got to the answer.

((call/cc call/cc) (lambda (x) 5)) 

I expanded it as follows.

((call/cc (lambda (k) (call/cc (lambda (k1) (k k1))))) (lambda (x) 5))

Assuming the expansion is correct I still don't understand what happens when k continuation is applied to k1 continuation and how it does to the execution of outer lambda to yield 5.

1

There are 1 answers

4
C. K. Young On BEST ANSWER

The (k k1) would return k1 as the return value of the outer call/cc. Then when you invoke k1 (as part of (... (lambda (x) 5))), that returns 5 as the return value of the inner call/cc, which is then returned (as a normal return this time) as the return value of the outer call/cc.

Sorry, that was quite a mouthful. :-)