kprolog K-Prolog Compiler Version 6.0

ヒストリ機能

K-Prolog には ヒストリ機能があります。 ヒストリとは、トップレベルで入力した種々の指令をデータベースに蓄えておいて、 後で同じ指令が必要になったときに簡単に呼び出せるようにする仕掛のことです。


ヒストリの記録

トップレベルからの入力のうち、直前の20個がデータベースに番号付きで 記録されます。 番号は、1から始まる昇順の整数です。 ヒストリの個数を20から変えるためには、

   13 ?- set_history(40).

のように指定します。
set_history により、それまでのヒストリ記録の内容は失われてしまいます。


ヒストリの検索と置換

ヒストリに蓄えられている指令を呼び出すには、いくつかの方法があります。 どの場合でも;から始まるヒストリ検索指令によってヒストリが検索され、 一致したものが実行されます。

最も単純なヒストリ検索指令は、

   22: ?- ;18.
   22: edit myprog.pl
の形で、ヒストリ番号を直接指示するものです。2番目の行はヒストリの22番 に新しく追加された記録を表しています。
   23: ?- ;ed.
   23: edit myprog.pl.
のように、述語の最初の一部を指定して検索することもできます (この場合検索は、述語の名前→第1引数の順で行います)。
   24: ?- ;myprog.
   24: edit myprog.pl.
直前のヒストリ番号を表す記号は''です。
   25: ?- ;''.
   25: edit myprog.pl.
ヒストリを検索して得られた結果に、項の置換操作を加えることが出来ます。
   26: ?-  ;ed;myprog;mylib.
   26: edit mylib.pl.
この置換操作は、組込み述語 replace_term によって行われますから、 一般に最初の指定項と単一化可能なすべての項を次の指定項で置き換えます。 複合項の名前だけの置換も行えます。
また、変数の置換は変数名によって行います。 指定項の中の変数は、ゴール列の中の同名の変数と単一化されます (ただし、複合項のアリティを変えたり、文字列の一部を置き換えたりするこ とはできません)。

特に最初の指定項として!はゴール列の先頭を、|はゴール列の 末尾を表わします。!または|を使うことによって ゴール列の先頭または末尾に新しいゴールを挿入できます。


ヒストリの表示検索

ヒストリ番号や部分指定によるヒストリ検索の他に、ヒストリを表示しながら 探す方法もあります。
   27: ?- history.
   26: <edit mylib.pl><cr>
   25: <edit myprog.pl>;
   28: edit myprog.pl
history 指令により、インタプリタはヒストリを新しいものから順に 表示します。復帰改行キーのみ入力すると、次に古いものを表示します (26:の行)。
25:の行では、;によりヒストリ番号25の行を選択しています。 ヒストリ検索や置換は、前節で説明したトップレベルからの方法が同様に使えます。 ただし、この方法の場合は行末のフルストップ('.'+空白文字)は不要です。 ヒストリ番号を省略して置換操作だけを指定することもできます。 変数の置換をこの方法で行なうことはできません。
   29: ?- history.
   28: <edit myprog.pl><cr>
   27: <history><cr>
   26: <edit mylib.pl>;edit;compile
   30: compile(mylib.pl)
ヒストリの検索は必ず一番新しい記録から行われます。 なお、この方法でヒストリを検索して実行するとき、 結果の表示は選択されて実行した指令および history 指令に対して、 両方についてなされますから混乱しないでください。 ヒストリ表示検索の途中で中止してトップレベルに戻るには、任意の小文字を使います。
   26: <edit mylib.pl>f
   no
   30: ?-


ヒストリの表示と保存

有効なすべてのヒストリ記録を表示するためには
   31: ?- show_history.
を使います。

K-Prolog を正常に終了するとホーム・ディレクトリに .prologhist というファイルが生成されます。 このファイルには終了時のヒストリ記録が書き込まれ、 次に起動したときにヒストリが復元されます。 明示的にヒストリ記録を保存・復元するには、

   32: ?- save_history.  
や
   33: ?- restore_history.
を使います。restore_historyは、save_history を行ったときの ヒストリ記録をファイルから復元します。


一つ上に戻る 目次に戻る