5

すべてのモジュール (および理想的には、ロードまたはインクルードされた他のすべてのファイル) が最新であることを確認するにはどうすればよいですか? を発行するuse_module(mymodule)と、SICStus はファイルの変更日を比較し、mymodule.pl新しい場合は再ロードします。またinclude、-ed ファイルは再コンパイルをトリガーします。ただし、 で使用されるすべてのモジュールを再チェックするわけではありませんmymodule

簡単に言うと、SWI が で提供するのと同様の機能を得るにはどうすればよいmake/0ですか?

4

2 に答える 2

7

SICStus Prolog には、そのような機能を提供するものはありません。

大きな問題は、現在の Prolog が動的すぎて、make/0 のようなものが非常に単純な場合を除いて確実に機能しないことです。用語展開、ロード中に実行されるゴール (一般的なファイル ロード ゴールを含む) などの機能では、ファイルを確実に再ロードする方法を知ることはできません。私はそれを詳しく見ていませんが、おそらく SWI Prolog の make/0 にも同じ問題があります。

私は通常、Prolog プロセスを再起動して、「メイン」ファイル、つまり必要なものすべてをロードするファイルを再度ロードします。

PS。コメントでコードのフォーマットを取得できなかったので、代わりにここに置きました: make/0 が current_module/2 からのファイルとして「ユーザー」に対してガードする必要がある理由の例:

| ?- [user].
% compiling user...
| :- module(m,[p/0]). p. end_of_file.

%  module m imported into user
% compiled user in module m, 0 msec 752 bytes
yes
| ?- current_module(M, F), F==user.
F = user,
M = m ? ;
no
| ?-
于 2016-01-01T21:35:14.033 に答える