2011-11-13 14 views
0

私のプログラムでは動的節がありますが、うまくいきますが、プログラムを閉じると消えてしまいます。GPrologデータベースを保存しています

私はその

saveState :- 
    write_pl_state_file('backup.dat'). 

loadState :- 
    file_exists('backup.dat'), 
    read_pl_state_file('backup.dat'); !. 

をしようと試みてきたが、これは作品ではありません。

このデータベースをファイルに保存する方法はありますか?

答えて

1

述語write_pl_state_file/1及びread_pl_state_file /1用語の解析、すなわちオペレータの定義、文字変換のPrologフラグに影響を与える情報/状態に接続されているが、だからの一部

ある等あなたの解決策(たぶん)ですが、もっと基本的に動的節定義を保存したいと思っています。恐らくファイルを参照して元に戻すことができます。

述語listing/0はこのようなことを行いますが、ダイナミック句はファイルではなく「コンソール」に表示されます。おそらくthe underlying predicateportray_clause/2を使用して、出力をファイル(ストリーム)にリダイレクトすることができます。

著者ダニエル・ディアスnoted a slight changeあなたは必ず最新バージョンを持ってしたいことがありので、バージョン1.4.0のための最新のリリースノートにportray_clause/2用(出力の最後に改行を追加)読みやすさのために。

を追加しました:

バージョン1.3.2で始まるGNU Prologのは、(1.3.1およびそれ以前のようではなく、単にコンソールに比べて)現在のストリームにリスト/ 0出力を送信してサポートしていることを表示されます。

| ?- 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 ...メニューに相当)の問題があります。コンパイルはコマンドラインから実行され、ロード/ 1がコンソールで正しく処理できるバイトコードファイルが生成されるため、設定方法には若干の問題があります。バグレポートを送って、私がそれを二乗してしまったら、さらにメモを書きます。私はまだLinux上でそれを試していない。

+0

私は* consult *でこの節をロードできますか? – skayred

+0

保存の例をいくつか教えてもらえますか? – skayred

+0

@skayred:通常のPrologソースファイルを作成します(もちろんコメントはなく、変数名には少しの再構成があります)。上記のスニペットを追加してアイデアを説明しましたが、一般的にファイルのコンサルティングに問題がありました。私はそれが理解できたら、さらにメモを掲示します。 – hardmath

0

current_predicate/1またはpredicate_property/2を使用して述語にアクセスし、clause/2を使用して述語の句にアクセスすることができます。

次に、その情報を使用して保存ユーティリティを作成することができます。

関連する問題