項ベクター

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

戻る 続く..