関数

MINERVAは、内蔵述語やユーザ定義述語を関数型で評価をするための2つの 内蔵述語を提供します。

is/2 	算術式評価
<-/2	関数評価

関数でのプログラミングは、同等の述語を使う場合よりも 書き込み・読み込みともに容易な場合があります。

最後の引数に値を返す述語を使って、 以下のように算術関数を定義することができます。

somearithmetic(Arg1,...,ArgN,Result)
そして、その関数を関係型で以下のように呼び出すことも可能ですし、
?- somearithmetic(Arg1,...,ArgN,Result)
表記型で以下のように呼び出すことも可能です。
?- Result is somearithmetic(Arg1,...,ArgN).

最後の引数に値を返す述語を使って、一般的な関数を定義することができます。

Predicate(Arg1,...,ArgN,Result)
そして、その関数を関係型で以下のように呼び出すことも可能ですし、
?- Predicate(Arg1,...,ArgN,Result)
表記型で以下のように呼び出すことも可能です。
?- Result <- Predicate(Arg1,...,ArgN).

<-/2 の動きは

Res <- Goal :-
        Goal =.. [Name|Args],
        append(Args,[Res],XtArgs),
        XtGoal =.. [Name|XtArgs],
        call(XtGoal).
の様に記述できますが、is/2 および <-/2はどちらも、 効率的に実装されたMINERVAの内蔵述語です。

以下は、古典的なPrologを使った例です。

List <- append([a,b,c],[d,e,f])

以下は、MINERVAオブジェクトを使った例です。

Counter <- create_counter(10),
Index <- Counter::next,
...


戻る 続く..