えんじにぃーあぶろぐ

あまり長い文章は好きではないので、長い時間をかけないで読める、簡単な内容を目指すエンジニアのブログです。

継続

さて

 

今日も仕事で出た話題からですが、

 

 

 

「継続」

 

 

 

についてです。

 

 

とは言っても、

 

 

 

 

 

 

 

f:id:ygt1qa3:20190221205628j:plain

 

 

 

 

 

 

 

ではなく、

 

 

 

 

 

 

 

 

 

 

 

 

計算機科学においての「継続」です。

 

ちなみに余談ですが、私は物事が継続しないタイプで、

twitterとかアカウント作っても3日ぐらいで飽きちゃうんです。

 

このブログは続けていきたいですけどね。

 

 

 

 

 

 

 

 

 

 

 …

 

 

 

 

 

 

 

 

 

 

今回の「継続」について、

自分はほとんど知識がなかったので、さっそく調べてみました。

 

計算機科学における継続(けいぞく、continuation)とは、プログラムの実行においてある時点において評価されていない残りのプログラム(the rest of the program)を意味するものであり、手続き(procedure)として表現されるものである。

 

継続 - Wikipedia

 

 天下のwiki様には、このような一言説明に加えて、

詳しい概要が記載されておりました。

 

 

 

 

 

 

 

 

 …

 

 

 

 

 

 

 

 

 

今回職場では、

 

 

 

「継続渡しスタイル」

「限定継続」

 

 

 

の2つが出てきたので、これに絞って各々について調べてみましょう。

 

 

 

 

 

 

 

 

 

 

 

「継続渡しスタイル」

 継続 (次に行う処理) を関数 (クロージャ) で表して、それを引数に渡して実行することにします。これを「継続渡しスタイル (CPS) 」といいます。

お気楽 Scheme プログラミング入門

 

 

 

ふむふむ。

文字だけ見ると概念的には簡単そうですね。

 

 

 

例えば、関数がAとBとCの3つがあるとして、

Aで実行して得た値を、

BとCのどれに渡すかを自由に決めれる、という感じでしょうか?

 

 

 

 

 

 

 

プラモデルを作る過程に似てますね。

 

 

 

 

 

 

f:id:ygt1qa3:20190221212016j:plain

 

 

 

 

足のパーツを作り終えたとします。

 

この次の作業として、

 

尻尾を作ってもいいし、ハサミをつくってもいいし、

胴体が完成していれば胴体に足をつけてもいい。

 

 

 

この次の作業というのが「継続」ということですね。

 

 

 

同じ記事内に

一般のプログラミング言語では、Scheme のように継続を取り出して保存することはできません。

とあったので、ほぼScheme特有の機能ということでしょうか?

割と古めかしい感じなんですかね?

 

「継続」自体は色々な言語に取り入れられているみたいですね。

新しめだとRubyとか。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

「限定継続」

限定継続とは、「この後の計算」の範囲に区切りをつけた (delimit) 継続です。限定継続は呼び出されると、区切りのところまで処理を進めて、呼び出し元に戻ります。

限定継続 (delimited continuation) の動作を理解する - 映画は中劇

 

新しめの継続の理論で、

より細かい単位で処理を行えるという認識です。

 

ちょっと難しいですね。

 

 

 

resetが区切りの印

 

shiftが区切りまで切り取り

 

 

って感じですかね?

それらを使って限定継続(部分継続)を取り出すと。

 

ふーむ。

 

まだピンときてはいませんが、雰囲気はわかりました。

 

また別の機会に調べてみるとします。

 

ブログに残せるっていいですね~。