Mercury 入門 (5) 独自の関数の定義
独自の関数の定義
これまでは述語を定義してきましたが,述語では自然に式と組み合わせることができず,不便な場合があります. Mercury では,以下のようにユーザが関数を定義することができます.
:- func double(int) = int.
func(N) = N * 2.
特に指定をしない限り関数は引数はin
モード,
戻り値はout
モード,決定性はdet
とみなされます.
プログラム例
実行結果
20
if then else 式
関数の中で条件分岐するには,if then else 式を使います.
if ゴール1 then 式1 else 式2
ゴール1
が成功すれば式1
の値を,失敗すれば式2
の値を全体の値とします.
前に出てきた if then else ゴールは,述語を対象としていたのに対して,
if then else 式は,式を対象としており,全くの別物です.
以下は if then else 式で fact
関数を定義した例です.
実行結果
fact(5) = 120
関数は述語を用いて定義することもできます. 以下では,if then else 式ではなく,if then else ゴールを用いていることに注意してください.
実行結果
fact(5) = 120