cont 在 Scheme 中是一個代表續程的函數,它不是一個數值。當 call/cc 被呼叫時,它將當前的續程(一個可以在未來的任何時刻恢復當前計算的函數)作為參數傳遞給它的參數,這裡是一個匿名函數(lambda)。
在匿名函數中,set! 命令將 return 變量設置為這個續程。這意味著在之後的計算中,任何時候呼叫 return 都將使計算跳轉回 call/cc 的位置,並用 return 的參數替換原本的 call/cc 的返回值。
匿名函數返回 1。所以 call/cc 表達式的結果就是 1,它與外部的 + 1 結合後得到 2。這個結果是在沒有呼叫 return 的情況下計算得到的。
然後程式運行到 (return 22)。由於 return 已經被設置為先前的續程,這行代碼將會結束當前的計算並返回 22,替代了原本 call/cc 的返回值 2。
所以,最終的輸出結果是 22,而不是 2。這是因為 return 的呼叫繞過了原本的計算過程,直接返回了 22。