このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

HoareRulesの関数構文、その意味的区別

構文的には関数呼び出しであっても、用途/役割、あるいは型(タイプ)により、次の3種に分類されます。

  1. 述語 -- 戻り値はboolean、副作用なし。
  2. (狭義の)関数 -- 戻り値の型は任意、値を必ず戻す。副作用なし。
  3. コマンド -- 戻り値の型は任意、値がなくてもよい(void戻り値)。副作用があってもよい。

使い方と制限は:

  1. 条件式のトップレベルに出現できるのは述語だけ。
  2. 条件式の述語引数内に出現できるのは(狭義の)関数だけ。ただし、述語も関数の一種とみなす。
  3. アクション(複文の)のトップレベルに出現できるのはコマンドだけ。
  4. アクションのコマンド引数内には何でも出現できるが、値を返さないコマンドはまずい。

以後、混乱を避けるために、関数呼び出し構文に対応する実体をコーラブルと呼び、狭義の(副作用なし、値を戻す)関数を単に関数と呼びましょう。原理的には、関数をコマンドとして使っても何の問題もないのですが、ここでは関数とコマンドは排他的概念としておきます。まとめると:

  • 述語⊂関数⊂コーラブル
  • コマンド⊂コーラブル
  • 関数∩コマンド = 空 (互いに排他的)
  • コーラブル = 関数∪コマンド