我在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时会发生什么。
答案 0 :(得分:1)
(k k1)
会返回k1
作为外call/cc
的返回值。然后当你调用k1
(作为(... (lambda (x) 5))
的一部分)时,它返回5作为内部call/cc
的返回值,然后返回(这次作为正常返回)作为外部call/cc
的返回值。
抱歉,这真是令人满口。 : - )