Как мне узнать, является ли выражение продолжением? - PullRequest
0 голосов
/ 07 декабря 2018
(+ 2 (let/cc cont
    (begin
     (set! global-cont cont)
     3)))
5

global-cont
#<continuation>

(global-cont 5) ; global-cont: (+ 2 _)
7

Я знаю, что весь блок (+ 2 ... 3))) является продолжением.Но почему global-cont тоже продолжение?Я пытался проверить документ let/cc , но это трудно понять.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Думаю, я бы не согласился с тем, что «весь блок (+ 2 ...) является продолжением».Если под «продолжением» вы подразумеваете «значение, захваченное символом let / cc или его эквивалентом (call / cc и т. Д.)», То весь блок не является продолжением.

Итак: cont является продолжениемпотому что вы захватили его с let/cc.global-cont является продолжением, потому что вы назначили продолжение к нему.

0 голосов
/ 07 декабря 2018

В этом выражении:

(let/cc cont body ...)

cont является продолжением (+ 2 _), и в теле вы делаете это:

(set! global-cont cont)

В общем, вы присваиваете cont global-cont, что делает его также продолжением.

...