IF/PrologのCインタフェ−スによって、ユ−ザはIF/Prologインタプリタとコンパイラを、個々の要求を満たすようカスタマイズすることができます。ユ−ザは、C言語により独自の組み込み述語を書くことができ、それらを普通のPrologの述語と同様に使うことができます。
Cインタフェ−スが提供する一連のC機能によって、Prologのすべてのデ−タタイプ(アトム、項、整数、構造、リスト、変数)およびPrologのすべての制御機能(バックトラッキング、カット、失敗)が処理できます。
<C言語インタフェ−スの応用例>
-そのコンピュ−タに固有のハ−ドウェアとのインタフェ−ス -グラフィックシステムとの接続 -FORTRAN,Pascal,アセンブラのような他の言語とのインタフェ−ス -デ−タベ−スへのアクセス、またはデ−タベ−スル−チンを使用する -Prologからオペレ−ティングシステムの命令を使用 -知識ベ−スとの接続 -他のPrologシステムからの移植の際、使用可能な述語の実現 -IF/PrologセッションのC言語からの実行
Cインタフェ−スマニュアルで用いられているすべてのプログラム例は、IF/Prologと共に提供されています。これらは $PROROOT/demos/cディレクトリの中にあります。またこのマニュアルで述べるその他すべてのファイルは、図C-1で示されているように、ディレクトリ$PROPOOT/cの中にあります。 注意:この記述は、完全にはUNIXのオペレ−ションと同等な機能を提供していないIBM-PC版には必ずしも適用できるとは限りません。
+-- ifprolog* |-- ifcc* |-- iflink* +---- bin/ ------------|-- ifsem* | +-- ifopt0* | |---- ifprolog/ -------+-- *.pst | +-- *.sem | |---- library/ --------+-- *.sem | |-- io/ | +-- data/ | | | +-- cpred.h |---- c/ --------------|-- cpro.h | |-- io.h | |-- main.o | |-- spoot.o $PROROOT/ -------| +-- libifprolog.a | | | +--ifcc.1 |---- main/ -----------|-- ifprolog.1 | +-- ifsem.1 | |--- util/ -----------+-- cgen/ | |-- emacs/ | |-- gks/ | |-- oracle/ | +-- sql/ | | +-- benchmarks/ |---- demos/ ---------|-- c/ | |-- cpro/ | |-- f77/ | |-- pro/ | +-- streams/ | | -- x11r4/ --------| | | | |--- optional |--- motif11/ ------|
図C-1:IF/Prologのデイレクトリ構造
図C-2で示されているように標準のIF/Prologのインタプリタは、2つの部分からできています。
- $PROROOT/bin/ifprologにある実行可能なコ−ド (バイナリ) - $PROROOT/library/*.semにあるライブラリ−のファイル(Prolog)
+-------------+ +--------------+ +---------+ | | | break.sem | | users |<---->| IF/Prolog |<---->| consult.sem | | Prolog | | binary | | debug.sem | | Program | | | | etc... | +---------+ +-------------+ +--------------+
図C-2:IF/Prologの標準構成
あなたの定義したC述語をIF/Prologのインタプリタ/コンパイラと共に使用するためには、新しいIF/Prologのオブジェクトは、新しい述語を含むファイルのコンパイル(たとえばnewpreds.c)し、そのファイルを通常のIF/Prologのオブジェクトにリンクして生成しなければなりません。(図C-3参照)
+------------+ | newpreds.c | +------------+ | +------------+ | ifcc | +------------+ | +--------+ +------------+ +---------------+ +--------+ | main.o | | newpreds.o | | libifprolog.a | | curses | +--------+ +------------+ +---------------+ +--------+ | | | | +------------------------------------------------+ | +----------+ | iflink | +----------+ | +--------------------+ +--------------+ +---------+ | IF/Prolog binary | | break.sem | | user's | | | | consut.sem | | Prolog |<-->| |<-->| debug.sem | | Program | | user's C-functions | | etc... | +---------+ +--------------------+ +--------------+
図C-3:IF/Prologの新しいバ−ジョンの生成