このリリースでは、ダイナミック述語の高速化、これを扱うPrologフラグの提供、お客様から頂いた要望に基づいた改良がなされました。ご意見を頂いたお客様には心よりお礼を申し上げます。 CORBA用述語は、拡張セットに加えられました。
ダイナミック述語(dynamic、asserta、assertz、retractを参照してください)は、賢いインデクシングをするように実装されています。 ダイナミック述語を多く利用する顧客アプリケーションでは、MINERVAの今までのバージョンに比して2桁のパフォーマンス増加を達成しました。
MINERVAにおけるインデクシングについて: インデクシングは、リニアから一定時間に、指数時間から対数時間まで、データ集合へのアクセス速度をあげるいろいろな方法に対する一般的な言葉です。 MINERVAにおいては、3種類のデータがあります: コンパイルされた述語、ダイナミック述語と黒板です。
コンパイルされた述語の場合、「最初の引数インデクシング」が最初の引数が変数でない述語の集合のために使われます。 インデクシングは、述語の関数子とアリティおよび最初の引数の関数子について作用します。より深い項の部分については使われません。
ダイナミック述語では、MINERVAが価値があるとみなすときはいつでも、変数として決してアサートされない全ての引き数に対して「賢いインデクシング」がされます。 インデクシングは述語の関数子とアリティと、目標とされた引き数の関数子とに関して働きます、項のより深い部分は使われません。
黒板で保存されるデータの場合、「徹底的なインデクシング」はキーに対して行われます: より深い部分を含む全部の項が、インデクシングのための材料として使われます。
プログラミングのヒント:
1) インデクシングは、「変数ではない」データ・セットのために行われます。つまり重要な場所にある変数に対して作動されません。 以下のようなものをインデクシングすることによって:
a(1). a(2). a(X) :- X = undetermined. % catch-all caseスピードアップにはつながりません。 これは悪い例です。
2) インデクシングされたデータ・セットへのアクセスは、キーが実際に使われる時のみ速くなります。 以下を比較してください:
Data: male(eric). male(健太郎). : female(美香). female(sonya). : Program: % GOOD % BAD ?- male(charles). ?- male(X), X = 薫.
set_prolog_flagは、'error', 'warning', 'unknown'を知っています。
get_prolog_flagは、'max_arity'と'unknown'を知っています。
ISO Prolog標準に違反して、get_prolog_flagへの最初の引数は、値を与えられなければなりません。
お客様の要望に従い、sort/2は新しくなり、非常に効率的でより良くなりました。
お客様の要望に従い、CORBAにアクセスするソースとプリコンパイルされたMINERVA述語を追加しました。 例題プログラム/拡張/CORBA/を参照してください。
MINERVAの以前のバージョンのリリースノートも再読してください。 次のリリースの為に、ご意見、ご希望をお寄せください。
| 冒頭へ |
|