MINERVAプログラムmetagenは、与えられたJavaクラスのすべてのコンストラクターとメソッドのために、MINERVA述語を生成します。
その述語名は、Javaの対応するものに1対1で対応します。
生成されたコメントは、これらの述語の使用に関するドキュメントとなります。
metagenの使用は、3つのステップに分かれています:
例えば、Javaクラスjava.util.Randomによって提供される擬似乱数を加えたいと仮定します。 その場合、3つのステップは以下のようになります。
:- java_predicates('java.util.Random', [
% java.util.Random()
% random_create(-java.util.Random)
% random_create / 1
random_create = 'java.util.Random',
% int nextInt(int)
% random_nextInt_1(+java.util.Random, +int, -int)
% random_nextInt_1 / 3
random_nextInt_1 = nextInt(int)]).
これにより、インタフェース記述random.mpkを持つMINERVAオブジェクトプログラムrandom.mbcが生成されました。
さらに、MINERVAはJavaより高いレベル言語なので、あなたのアプリケーションから見えないJavaオブジェクトのシステム・レベルでの作成と処理を抽象化するアプリケーション・レベル述語を定義しすることができます。
以下に、metagenによって生成されるjava.util.Randomのための完全なソース・プログラムを挙げます。 コメントは、Java、そして、Prologの名前と入出力データタイプのドキュメントです。
java_predicates('java.util.Random', [
% java.util.Random()
% random_create(-java.util.Random)
% random_create / 1
random_create = 'java.util.Random',
% java.util.Random(long)
% random_create_0(+long, -java.util.Random)
% random_create_0 / 2
random_create_0 = 'java.util.Random'(long),
% boolean nextBoolean()
% random_nextBoolean(+java.util.Random, -boolean)
% random_nextBoolean / 1
random_nextBoolean = nextBoolean,
% void nextBytes(byte[])
% random_nextBytes(+java.util.Random, +byte[])
% random_nextBytes / 2
random_nextBytes = nextBytes([byte]),
% double nextDouble()
% random_nextDouble(+java.util.Random, -double)
% random_nextDouble / 2
random_nextDouble = nextDouble,
% float nextFloat()
% random_nextFloat(+java.util.Random, -float)
% random_nextFloat / 2
random_nextFloat = nextFloat,
% double nextGaussian()
% random_nextGaussian(+java.util.Random, -double)
% random_nextGaussian / 2
random_nextGaussian = nextGaussian,
% int nextInt()
% random_nextInt(+java.util.Random, -int)
% random_nextInt / 2
random_nextInt = nextInt,
% int nextInt(int)
% random_nextInt_1(+java.util.Random, +int, -int)
% random_nextInt_1 / 3
random_nextInt_1 = nextInt(int),
% long nextLong()
% random_nextLong(+java.util.Random, -long)
% random_nextLong / 2
random_nextLong = nextLong,
% void setSeed(long)
% random_setSeed(+java.util.Random, +long)
% random_setSeed / 2
random_setSeed = setSeed(long)]).