kprolog K-Prolog Compiler Version 6.0

パイプの接続

OSのコマンドの機能や、独立のプログラムとして開発されたユーティリティには、 標準入出力の接続を変えることにより、 フィルタとして使えるものがたくさんあります。
K-Prolog では、これらのプログラムに ァイル入出力を接続することができます。
入力ファイル→→コマンド→get/read→ prolog

         prolog→put/write→コマンド→→出力ファイル
一般には上図のように入力ファイルをコマンドを通して変換した結果を get/1 または read/1 で読むか、prologからの put/1 または write/1 に よる出力をコマンドで変換した結果をファイルに書くという流れになります。
[例]
   more(Goal) :- tellpipe(more),Goal,told.
   tellpipe(Comm) :- tell([],Comm).
more/1 は上例のように定義されています。 tellpipe/1 は出力ファイルを指定せずに(標準出力のまま)more コマン ドをファイル出力に接続します。したがって、
   34: ?- more listing.
を実行すると listing述語がファイル出力に書き出すプログラムのリストを more を通して表示することになります。 see/2tell/2 の一般形は次の形式です。
see(ファイル名、コマンド名)
tell(ファイル名、コマンド名)
'コマンド名 ファイル名'の形のコマンドをそれぞれファイル入力、 ファイル出力に接続します。 ファイル名として[]を指定すると無指定を表します。 この場合は、'コマンド名'が接続されます。これらのコマンドの形は 実行される形として正しければ他の引数や記号を含んでもかまいません。

'cat ファイル名'や'tail ファイル名'のようにファイル名を 指定するようになっているフィルター型のコマンドを使用する場合が多いので、 このような指定形式を採用しています。

[例] #で始まる行以外を読みたい場合に grep コマンドを使用する

   35: ?- see('tmp.pl','grep -v "^#"').

コマンド名として [] を指定した場合は、通常の see/1、tell/1 と 同じです。


一つ上に戻る 目次に戻る