Ich konvertiere einen Scheme-Code in Common Lisp. Ich kenne Scheme nicht. Ich kenne ein bisschen Common Lisp.Convert eine Scheme-Call-with-Current-Fortsetzung zu Common Lisp?
ist die Scheme-Code:
(define (with-process-abortion thunk)
(call-with-current-continuation
(lambda (k)
(fluid-let ((*abort-process* k))
(thunk)))))
ich auf dem Schema call-with-current-continuation
Funktion etwas zu lesen habe aber, ehrlich gesagt, ich habe keine Ahnung, was die obige Funktion tut. Meine Umstellung auf Common Lisp ist sehr Skelett zu diesem Zeitpunkt:
(defun with-process-abortion (thunk)
;; No idea how to implement
)
This SO post sagt:
jedes Vorkommen von Call/cc kann mit dem folgenden gleichwertig ersetzt werden:
(Lambda (fk) (f (lambda (v k0) (kv)) k))
wo k ist die Fortsetzung gespeichert werden soll, und (Lambda (v k0) (kv)) ist der escap Die Prozedur, die diese Fortsetzung wiederherstellt (was auch immer Fortsetzung k0, die aktiv ist, wenn es aufgerufen wird, wird verworfen).
Okay, was würde f
in meiner Situation entsprechen? Was würde k
entsprechen?
Vielen Dank @Doug Currie zu ersetzen. Ich werde es versuchen. –
'thunk' muss wie' 'defun with-process-abortion (thunk) aufgerufen werden (catch 'wpa (funcall thunk)))' – Sylwester
Danke @Sylwester! –