高度

MINERVAプログラムmetagenは、与えられたJavaクラスのすべてのコンストラクターとメソッドのために、MINERVA述語を生成します。

その述語名は、Javaの対応するものに1対1で対応します。

生成されたコメントは、これらの述語の使用に関するドキュメントとなります。

metagenの使用は、3つのステップに分かれています:

  1. あなたがMINERVAに加えて欲しいクラスのところで、metagenを起動します
  2. 生成されたMINERVAソースファイルを、任意に編集します
  3. コンパイル

例えば、Javaクラスjava.util.Randomによって提供される擬似乱数を加えたいと仮定します。 その場合、3つのステップは以下のようになります。

  1. minerva -l $MINERVA_HOME/extender/metagen java.util.Random > random.min
  2. random.minを編集します。 以下にある生成された出力を参照して下さい。不要なメソッドを削除して、独立したMINERVAパッケージを作るために以下のようにします。
  3. minervac random

これにより、インタフェース記述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)]).


戻る 続く..