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, ...