2016-11-05 8 views
1

私はかなりプロローグに新しいです。 SICStusを使用して、すでに相談されているファイルを変更すると、SICStusは変更を認識しません。唯一の方法は私が窓を閉じてもう一度始めることです。しかし明らかに、これは、ファイルを変更するたびにウィンドウを閉じることは迷惑ではなく時間を無駄にするだけでは実用的ではありません。私はSicstus 4.2.1、Windows版を使用しています。これまでは、consult(ファイル)、reconsult(ファイル)、compile(ファイル)というコマンドを試しましたが、違いはありませんでした。 SICStusは、ウィンドウを閉じて開くまで、変更を無視します。SICStus Prologは変更を無視します

例えば、私は述語test/2を持っていたと言ってください。その後、私はそれを削除し、ファイルを保存しました。そして、私はreconsult(ファイル)とタイプします。私の期待は、SICStusが行った変更を認識し、述語が存在しないと言うことでした。しかし、それは存在するかのように続きます。私がウィンドウを閉じてからもう一度やり直すと、述語が存在しないと正しく文句を言うでしょう。

しかし、奇妙なことに、それはreconsult(file)で新たに追加された述語を認識しますが、変更または削除されてもそれは認識しません。

+0

関連する:[SICStusの機能を作る](http://stackoverflow.com/q/34558948/772868)。 – false

+2

reconsult(file)は、述語の変更、つまり節の追加または削除を認識する必要があります。あなたのために何が起こるのではないですか? PS。 [SICStus IDE](https://sicstus.sics.se/spider)では、ボタンを押しながらSICStusのトップレベルを再起動できます。 –

+0

私の場合、いいえ、reconsultは変更を全く認識しません。 – Enigma

答えて

1

consult/1reconsult/1、及び'.'/2 —は、第1970ies で定義されているすべてのレガシービルトインされています。今日、彼らは迅速かつ汚れた編集のためだけです。これらの構文のセマンティクスは(実際にはまだあります)、実装特有のため、標準化の準備が整ったクリーンなセマンティクスに合意することは不可能でした。そして、あなたはそれらの弱点の1つを指摘しました。はい、一度定義すると、暗黙的に述語を定義解除することはできません。 SICStusの実装固有のabolish/2を使用して、述部を削除してください。

一般に、ensure_loaded/1を代わりに使用してください。これは、ファイルの変更日が変更されたかどうかを確認するためです。これを使用するより一般的な方法は、make.を発行することです。しかし、再度、特定の変更が適切に考慮されていないことに注意してください。私はまだ変更されたファイルをリロードするのにmake.を使用します。

クリーンな方法は、モジュールを使用することであり、そこに再び、インターフェースの変更が適切に考慮されません、代わりに、いくつかの警告が発行されます。

| ?- use_module(modulefile). 
% compiling /home/ulrich/SO/modulefile.pl... 
* predicate test/2 imported by user from modulefile is private 
* Approximate lines: 1-2, file: '/home/ulrich/SO/modulefile.pl' 
% module modulefile imported into user 
% compiled /home/ulrich/SO/modulefile.pl in module modulefile, 0 msec 2768 bytes 
yes 

1私は早い文書DECsystem-10 Prolog(1978-09)のユーザーズガイドがあります。正誤表を含む1978-10のバージョンはhereです。

関連する問題