这个call / cc表达式如何工作?

时间:2014-12-12 13:13:38

标签: lambda scheme racket callcc

我在Racket上尝试这个,它给出了答案为5.但我似乎无法弄清楚它是如何得到答案的。

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

我将其扩展如下。

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

假设扩展是正确的,我仍然不明白当k continuation应用于k1 continuation以及它如何执行外部lambda以产生5时会发生什么。

1 个答案:

答案 0 :(得分:1)

(k k1)会返回k1作为外call/cc的返回值。然后当你调用k1(作为(... (lambda (x) 5))的一部分)时,它返回5作为内部call/cc的返回值,然后返回(这次作为正常返回)作为外部call/cc的返回值。

抱歉,这真是令人满口。 : - )