簡體   English   中英

只能用lambdas和閉包來實現call-with-current-continuation?

[英]Can call-with-current-continuation be implemented only with lambdas and closures?

有沒有人知道call/cc是否只能用lambdas和閉包實現?

似乎call/cc中斷了程序的流程(就像異常一樣),但lambdas和closures不能這樣做。 因此我認為call/cc不能通過lambdas和closures實現。

還有什么想法嗎?

問題並不是特別清楚,因為“只用lambdas和閉包實現”究竟是什么意思?

在任何情況下,continuation都可以在任何語言中使用閉包,方法是以連續傳遞方式手動編寫。 然后可以通過擴展編譯器來實現自動轉換為此表單,Lisps通常允許在用戶級別通過宏。 例如,請參閱cl-cont ,這是一個實現Common Lisp的延續的庫,它是一種沒有內置它們的語言。

如Scheme中的高效普遍延續可能會在直接處理程序堆棧的較低級別上實現,但這不是一個要求,只是一個優化。

在Scheme中,您可以在轉換為延續傳遞樣式(CPS)時使用lambdas實現call/cc 轉換為CPS時,每次出現的call/cc都可以替換為以下等價物:

(lambda (f k) (f (lambda (v k0) (k v)) k))

其中k是要保存的連續符,並且(lambda (v k0) (kv))是恢復此連續的轉義過程(無論在被調用時有效的連續k0被丟棄)。

所以,回答你對Scheme的問題:是的,可以做到。

暫無
暫無

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

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