用語の問題-コンピュテーション式、ワークフロー

 「モナド」という言葉の意味、というか「何を指してモナドといっていいのか」の範囲がぼんやりと分かったような気持ちになるまで、僕は何ヶ月も要しましたが、今また、僕は同じような問題に頭を抱えています。
 ワークフロー、計算式、コンピュテーション式、シーケンス式、計算式ビルダー、カスタムワークフロー、非同期ワークフローなど、ワークフロー周辺には怪しげな言葉がたくさん渦巻いています。これらの言葉はそもそもそれぞれ何を意味しているものなのでしょうか。
 そもそも「Programming F#」で「計算式」という言葉を見たときから、「なんだか『食パン』みたいで嫌な用語だなぁ」と感じたのですが、「Programming F#」「実践F#関数型プログラミング入門」の両方を並べて読み比べても、いまだに「計算式」という言葉の意味するものというものが掴みきれないでいます。
 以下、各言葉について、両書籍の記述を見ていきましょう。

ワークフロー

  • F#の特徴的な機能であるワークフローの~(実践F#関数型プログラミング入門、以下実践F#)
  • ワークフローとは逐次実行を行う式のことで(実践F#)
  • 式の実行順序を保証するために、F#ではワークフローという考え方を使用する必要があります。(実践F#)
  • ワークフローを実現するために、F#はコンピュテーション式を提供しており(実践F#)
  • コンピュテーション式という概念は、仕事や作業の手続きを表現するワークフローを実現するためのもので、~中略~逐次実行の仕組みです。(実践F#)
 実践F#だけを見ていても、ワークフローが果たして実装済みの機能なのか、式なのか、考え方なのか、いまひとつ判然としません。「Programming F#」に至っては、
  • 計算式は場合によってはワークフローとも呼ばれます(Programming F#、以下PF#)
  • あるいはワークフローとして重い思い仕事を引き受けてもらうことにより(PF#)
  • カスタムワークフロービルダーの中では~(PF#)
 というように、ワークフローと計算式(たぶん実践F#でいうコンピュテーション式)が同じものであるような記述がある一方、ワークフローはビルダークラスを指しているような記述もあります。

コンピュテーション式

 この言葉は「PF#」には出てきません。実践F#の「コンピュテーション式」とPF#の「計算式」は同じものを指しているようです。ただ、実践F#には別に「計算式」という言葉が使われており、並べて読むと結構混乱します。実践F#が言う「計算式」とは、もっと一般的な名詞での計算式を意味しているように思えます。
  • 逐次実行はコンピュテーション式の考えを基盤としており(実践F#)
  • コンピュテーション式が構築する計算式というデータ(実践F#)
  • 特徴的な式であるコンピュテーション式と(実践F#)
  • コンピュテーション式という概念は~中略~実行順序を保証する逐次実行の仕組みです(実践F#)
  • ワークフローを実現するために、、F#はコンピュテーション式を提供しており、コンピュテーション式とは、自分専用の計算式を構築する仕組みのことです(実践F#)
  • シーケンス式、コンピュテーション式、非同期ワークフロー ~中略~ 3つの式は、コンピュテーション式であり(実践F#)
  • 作成者が用途を決定するコンピュテーション式(実践F#)
  • コンピュテーション式は、シーケンス式と異なり式の変換後の振る舞いを独自に定義できるようにしたものです。(実践F#)
  • ビルダークラスのインスタンスを使って(コンピュテーション)式を定義(実践F#)
 このような記述を見ていると、やっぱり概念なのか仕組みなのか記述形式なのかはっきりしないのですが、
builderInstance {
  ~
  ~
}
 という形式で記述された部分をコンピュテーション式と呼んでいいのではないかという気がしてきます。

計算式

 「コンピュテーション式」で書いたように、PF#での「計算式」は「コンピュテーション式」という意味で使われているようです。実践F#では、
  • 構築した計算式は逐次実行されるという特徴を持ちます(実践F#)
  • 計算式というデータです(実践F#)
 というような文脈で登場します。コンピュテーション式が構築した、「実行できるけどまだ実行されていない式のデータ」という意味で使われているようです。ただ、BuilderのクラスにDelayが実装されていなければ、コンピュテーション式ははその場で処理を実行して結果だけを返してくるので、コンピュテーション式なら必ず計算式を構築する、という感じはいまひとつしません。一度クロージャを作ってそれを実行していると考えられなくもないですが、それならただの合成関数も計算式ということになります。そういう解釈でいいのかもしれませんが。
 なんか自分がすごくネチネチした性格のように思えてきました・・・・

ビルダー

 これは「BindやReturnを実装したクラス」ということでビンゴでしょうか。ただ、カスタムビルダーという言葉がPF#では使われており、カスタムというからにはカスタムでないビルダーもあるのではないかと思っているのですが、読む限りでは非同期ワークフローのビルダー以外はカスタムビルダーのようです。シーケンス式はビルダークラスで実装されていません。

(執筆中)
最終更新:2012年01月04日 21:17