Mercury 勉強メモ

関数論理型言語 Mercury を勉強するブログです.

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