| MINERVAプログラムmetagenは、与えられたJavaクラスのすべてのコンストラクターとメソッドのために、MINERVA述語を生成します。
その述語名は、Javaの対応するものに1対1で対応します。
生成されたコメントは、これらの述語の使用に関するドキュメントとなります。
metagenの使用は、3つのステップに分かれています:
- あなたがMINERVAに加えて欲しいクラスのところで、metagenを起動します
- 生成されたMINERVAソースファイルを、任意に編集します
- コンパイル
例えば、Javaクラスjava.util.Randomによって提供される擬似乱数を加えたいと仮定します。
その場合、3つのステップは以下のようになります。
- minerva -l $MINERVA_HOME/extender/metagen java.util.Random > random.min
- random.minを編集します。
以下にある生成された出力を参照して下さい。不要なメソッドを削除して、独立したMINERVAパッケージを作るために以下のようにします。
:- 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)]).
- minervac random
これにより、インタフェース記述random.mpkを持つMINERVAオブジェクトプログラムrandom.mbcが生成されました。
さらに、MINERVAはJavaより高いレベル言語なので、あなたのアプリケーションから見えないJavaオブジェクトのシステム・レベルでの作成と処理を抽象化するアプリケーション・レベル述語を定義しすることができます。
- 呼出し:
- minerva -l $MINERVA_HOME/extender/metagen my.java.Class
- 例題
- 例題プログラム/MINERVAの特徴/MinervaToJava
- 例題プログラム/MINERVAの特徴/MinervaToJavaScript
- 例題プログラム/拡張/*
以下に、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)]).
|