私はいくつかのSchemeコードをCommon Lispに変換しています。私はスキームを知らない。私はCommon Lispのことを少し知っています。ここでScheme call-with-current-continuationをCommon Lispに変換しますか?
は、Schemeコードです:
(define (with-process-abortion thunk)
(call-with-current-continuation
(lambda (k)
(fluid-let ((*abort-process* k))
(thunk)))))
私はスキームcall-with-current-continuation
機能にいくつかの読書をしましたが、正直、私は上記の関数が何をしているのか見当がつかない。 Common Lispのへの私の変換は、この時点で非常に骨格である:
(defun with-process-abortion (thunk)
;; No idea how to implement
)
This SO postは言う:
コール/ ccでの全ての発生は、以下の 同等に置き換えることができます:
(ラムダ( k)は保存される継続であり、(λ(v k0)(kv))は エスケープであるこのプロシージャを呼び出すときにアクティブになっている何らかの 継続k0が復元されます。
いいえ、私の状況ではf
はどうなりますか? k
は何に対応しますか?
と
(*abort-process*)
を置き換えることができ、非常に多くの@Dougカリーありがとうございます。私はそれを試してみましょう。 –'thunk'は'のように呼び出す必要があります。(プロセスの中断(サンク)(catch 'wpa(funcall thunk))) ' – Sylwester
ありがとう@Sylwester! –