構文的には関数呼び出しであっても、用途/役割、あるいは型(タイプ)により、次の3種に分類されます。
- 述語 -- 戻り値はboolean、副作用なし。
- (狭義の)関数 -- 戻り値の型は任意、値を必ず戻す。副作用なし。
- コマンド -- 戻り値の型は任意、値がなくてもよい(void戻り値)。副作用があってもよい。
使い方と制限は:
- 条件式のトップレベルに出現できるのは述語だけ。
- 条件式の述語引数内に出現できるのは(狭義の)関数だけ。ただし、述語も関数の一種とみなす。
- アクション(複文の)のトップレベルに出現できるのはコマンドだけ。
- アクションのコマンド引数内には何でも出現できるが、値を返さないコマンドはまずい。
以後、混乱を避けるために、関数呼び出し構文に対応する実体をコーラブルと呼び、狭義の(副作用なし、値を戻す)関数を単に関数と呼びましょう。原理的には、関数をコマンドとして使っても何の問題もないのですが、ここでは関数とコマンドは排他的概念としておきます。まとめると:
- 述語⊂関数⊂コーラブル
- コマンド⊂コーラブル
- 関数∩コマンド = 空 (互いに排他的)
- コーラブル = 関数∪コマンド