Minervaは、項を保存して読み出すためにいわゆる項ベクトルをサポートしています。
グローバル・データの管理をサポートするためには異なる種類の述語クラスが、存在します: Minervaデータベース(assert、retract、節、その他で処理します)、グローバル変数(set_global、get_global、その他で処理します)黒板(bb_put、bb_get、その他で処理されます)、そして、項ベクトルです。
項ベクトルを取り扱うために、以下の述語があります:
項ベクトルは、一種の動的にリサイズ可能な項のアレイです。
項を項ベクトルから保存し読み出す前に、あなたは項ベクトルをつくらなければなりません。 これは、tv_create/1で行います。 項ベクトルは初めは空です。すなわち、サイズは0です。 述語tv_add/2またはtv_set/3で、項ベクトルに項を加えることができます。 tv_list/2を呼ぶことによって、ベクトルの全ての項を読み出すことができます。そして、tv_get/3で一つの項をアクセスすることができます。
main(_) :-
my_findall(I, for(1,I,10), Numbers).
my_findall(Term, Goal, Terms) :-
% create a term vector ...
tv_create(Vector),
% .. . add a bulk of data to it ...
retrieve_info(Vector, Term, Goal),
% ... and collect all terms.
tv_list(Vector, Terms).
retrieve_info(Vector, Term, Goal) :-
% call a goal ...
call(Goal),
% ... store the information ...
tv_add(Vector, Term),
% ... and backtrack until there are no more results.
fail.
retrieve_info(_, _, _).
tv_add/2
tv_create/1
tv_get/3
tv_list/2
tv_set/3
tv_setsize/2
tv_size/2
戻る
続く..