継続
continuation
処理全体を時間軸で見た時に、ある点における継続とは、「その点以降の処理のこと」
以降の処理を全て行う関数、みたいなもの
この関数contに、最低限の引数を与えて、以降の処理を呼ぶ
コールバック関数の一種
雑に「末尾呼び出しコールバック関数」と言えそう
R5RSでの定義
Whenever a Scheme expression is evaluated there is a continuation wanting the result of the expression. The continuation represents an entire (default) future for the computation. ref
Schemeの式が評価される時、そこには評価の結果を待つ継続が一つ待機している。継続は計算の(デフォルトの)未来全体を表している。
処理全体を時間軸で見た時に、ある点における継続とは、「その点以降の処理のこと」
https://gyazo.com/d1c98d8a597515835c9a52fb40cc4fbb
関数呼び出しで説明されることが多いが、別にそれに限らない
例
こういう手続きfoo, bar,fを定義する
code:lisp
; foo, barと出力する手続きを定義
(define (foo) (print "foo"))
(define (bar) (print "bar"))
; 「foo手続きを呼び、その後bar手続きを呼ぶ」をする手続きfを定義
(define (f) (foo) (bar)) ; ①
(f)
code:result
foo
bar
#<undef>
①の部分のfooにとっての継続は、barの呼び出し、とそれ以降の処理
①の部分のbarにとっての継続は、fの呼び出しから元に戻るという操作、とそれ以降の処理
例
継続を表す記法
コールバック関数との関係
ref コールバック関数と継続の違い
参考
『shift/resetプログラミング入門』
/mrsekut-book-4873113482/300 (19章 継続) ~
『Node.jsデザインパターン 第2版』
/mrsekut-b/継続わからん
https://archive.jlongster.com/Whats-in-a-Continuation