私のプログラムには動的句があり、正常に動作しますが、プログラムを閉じると消えます。
私はそれを試しました
saveState :-
write_pl_state_file('backup.dat').
loadState :-
file_exists('backup.dat'),
read_pl_state_file('backup.dat'); !.
しかし、これは機能しません。
このデータベースをファイルに保存する方法はありますか?
私のプログラムには動的句があり、正常に動作しますが、プログラムを閉じると消えます。
私はそれを試しました
saveState :-
write_pl_state_file('backup.dat').
loadState :-
file_exists('backup.dat'),
read_pl_state_file('backup.dat'); !.
しかし、これは機能しません。
このデータベースをファイルに保存する方法はありますか?
述語write_pl_state_file/1とread_pl_state_file/1は、用語の解析に影響を与える情報/状態 (つまり、演算子の定義、文字変換 Prolog フラグなど) に関連付けられています。
これは (おそらく) 解決策の一部ですが、より基本的には、おそらくファイルを調べて元に戻すことができる形式で、動的句の定義を保存したいと考えています。
述語listing/0はこのようなことを行いますが、動的節をファイルではなく「コンソール」に表示します。おそらく、出力をファイル (ストリーム) にリダイレクトできるようにする、基礎となる述語 Portrait_clause/2を使用することをお勧めします。
著者の Daniel Diazは、バージョン 1.4.0 の最近のリリース ノートで、 reactor_clause/2のわずかな変更(出力の末尾に改行を追加) を指摘しています。 .
追加した:
バージョン 1.3.2 以降、GNU Prolog は、listing/0出力の現在のストリームへの送信をサポートしているようです (1.3.1 以前のようにコンソールだけではなく)。
テストケースは次のとおりです。
| ?- assertz(whoami(i)).
| ?- assertz(whoami(me)).
| ?- assertz(whoami(myself)).
動的述語whoami/1の 3 つの節 (事実) を作成します。
次に、次のクエリを使用してファイル myClauses.pl を作成しました。
| ?- open('myClauses.pl',write,S), set_output(S), listing, close(S).
ストリーム S が閉じられると、現在の出力がコンソールにリセットされます。
ファイル myClauses.pl には空白行が含まれており、その後に 3 つの句が続くため、ソース コードは参照するのに適切な形式になっています。しかし、Windows に新しくインストールした GNU Prolog 1.4.0 の Consult /1述語 (およびその File -> Consult... メニューに相当するもの) に問題があります。コンパイルはコマンド ラインから実行され、 load/1がコンソールで正しく処理できるバイトコード ファイルを生成するため、設定方法に小さな問題があります。バグレポートを送信して、それを解決したら、さらにメモを投稿します。Linux ではまだ試していません。
current_predicate/1
またはを使用predicate_property/2
して述語にアクセスしたりclause/2
、述語の句にアクセスしたりできます。
次に、その情報を使用して保存ユーティリティを作成できます。