リコンサルトは、コンサルトを拡張したものです。
データベースに記憶されたプログラムの一部を変更するために、ファイルを"リコンサルト"できます。IF/Prolog は、ファイルモジュールではなく、手続きモジュールに基づいて内部動作を行っていることに留意して下さい。従ってファイルをリコンサルトする時には、リコンサルトされるファイルに現れるデータベース中のすべての手続きは、まずまるごとデータベースから消去され、その後対応する手続きに対する新しい節が代わりに登録されます。つまり、リコンサルトする以前にデータベースに対して成された変更は、読み込まれたファイル内の手続きと名前と引数とが同一である限り、すべて消去されます。
従って、ファイルをモジュールとして扱わないように注意してください。リコンサルトされたファイル中の手続きのうち、これまでデータベースになかったものはデータベースに追加されます。以下のようにしてファイル"colleague"をリコンサルトして下さい。
?- reconsult(colleague). reconsult: file colleague.pro loaded in 1 sec.
yes ?- _
このコマンドの省略形は、マイナス記号がファイル名の前につく以外は、consultの省略形と同様です。
?- [-'colleague',-'paylist.tab']. reconsult: file colleague.pro loaded in 1 sec. reconsult: file paylist.tab loaded in 4 sec. yes ?- _
手続きのモジュール化についてこれまで述べたことを確かめるために、現在のデータベースの内容をリストアップしてみましょう。
?- listing. 'White' reports_to 'Jones'. 'McDonald' reports_to 'Jones'. 'Hill' reports_to 'Smith'. 'Newman' reports_to 'Smith'. 'Nixon' reports_to 'Smith'. 'Smith' reports_to 'New'. 'Jones' reports_to 'New'.
C1 is_subordinate_to C2 :- C1 reports_to C2.
C1 is_subordinate_to C2 :- C1 reports_to C3, C3 is_subordinate_to C2.
yes ?- _
あなたが最後に追加した2つの事実が削除されていることに注意して下さい。これは、リコンサルトによって各手続きが、リコンサルトされるファイル内の対応する手続きに置き換えられてしまうためです。つまり、同じ名前を持つ手続きに置き換えられるのです。