【发布时间】:2016-08-27 17:35:34
【问题描述】:
我正在将一些 Scheme 代码转换为 Common Lisp。我不知道方案。我懂一点 Common Lisp。
这是方案代码:
(define (with-process-abortion thunk)
(call-with-current-continuation
(lambda (k)
(fluid-let ((*abort-process* k))
(thunk)))))
我对 Scheme call-with-current-continuation 函数做了一些阅读,但老实说,我不知道上面的函数在做什么。此时我对 Common Lisp 的转换非常简单:
(defun with-process-abortion (thunk)
;; No idea how to implement
)
This SO post 说:
每次出现的 call/cc 都可以替换为以下内容 等效:
(lambda (f k) (f (lambda (v k0) (k v)) k))
其中 k 是要保存的延续, (lambda (v k0) (k v)) 是 恢复此延续的转义过程(无论 被调用时处于活动状态的延续 k0 被丢弃)。
好的,在我的情况下,f 对应的是什么? k 对应什么?
【问题讨论】:
标签: scheme