簡體   English   中英

(通話/抄送):延續到底是什么?

[英](call/cc): What exactly is continuation?

在SO上已經問過幾次這個問題,但是沒有一個解決我的問題。 什么是延續?

考慮以下代碼:

( (lambda (pair)
     (begin (print (car pair))
            ((cdr pair) (cons (+ 1 (car pair)) 
                              (cdr pair)))))

  (call/cc (lambda (k) 
             (cons 0 k))))

該程序無限循環打印從0開始的整數序列。

我的理解是:

步驟1: (call/cc (lambda (k) (cons 0 k)))被求值,返回對(0 . #continuation) (這里的#continuation

步驟2:將步驟1中的配對應用於lambda函數。 lambda函數首先打印出car ,即0。

現在,我完全迷路了 程序正在評估(#continuation (1 . #continuation)) ,這對我來說真的沒有意義。 #continuation現在是程序嗎?

是什么讓程序繼續將(call/cc (lambda (k) (cons 0 k)))應用於lambda函數? 這樣它就可以繼續自稱

我想我已經知道了。

繼續是程序的當前狀態

鑒於此,我們首先要問:程序的延續是什么,還是當前狀態是什么?

它是一個等待對的lambda函數。

#continuation = ( lambda-function <placeholder>)

<placeholder>將成為我們將傳遞給該lambda函數的函數,但我們尚未這樣做。

現在我們的程序開始運行,它評估lambda函數,然后通過call / cc評估對返回,即(0 . #continuation)

(print (car pair)) =>接下來,lambda函數打印出0

((cdr pair) (cons (+ 1 (car pair)) (cdr pair))))) =>這里, (cdr pair)是我們的continuation ,即(lambda-function <placeholder>) ,然后我們的程序通過一對新的。 然后程序開始其無限循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM