この章では、ユ−ザが独自の組み込みC述語を簡単に書くためのIF/PrologC関数について説明します。それらは、$PROROOT/c/libifprolog.aの中にあり、カスタマイズされたIF/Prologのバ−ジョンを作るために、IF/Prologのオブジェクトコ−ドとユ−ザのコンパイルしたC述語にリンクされています。
デ−タ型TERMは、Prolog本体の各型を表現するために使われる内部デ−タ構造です。どのTERMもIF/Prologにどの型なのかを示すいくつかのタグビットを持っています(たとえば整数,アトムなど)。 またPrologのTERMをC表現に変換し、その逆にC表現をPrologのTERMに変換するC関数が提供されています。これは非常に重要です。なぜならば、述語の引数がCル−チンを通るとき、それらの述語はTERMとして表現されるからです。通常、それらの述語を処理しようとすれば、必ずC表現に変換しなければなりません。IF/Prologに再び戻ってある結果を出そうとする場合、まず始めにC表現からTERMに変換されなければなりません。またタグビットをチェックすることにより、TERMの型を検査するC関数も提供されています。
IF/Prologでは、整数をC言語の中で処理する場合には、型INTを使います。INTはC言語のデ−タ型longと同じです。多くのコンピュ−タの機種では、INTとlongは同じ働きをしますが、異なる場合もあります。IF/Prologでは、実数をC言語の中で処理する場合には、型DBLを使います。DBLは、C言語のデ−タ型doubleと同じです。もしintやlongをC述語に使っていれば、まず述語をTERMに変換する前に、それらをINTやDBLにキャストしなければなりません。Cの値をキャストするには、キャストしたいデ−タ型を()に入れて、もとの値の前に書きます。 たとえば
float X; INT X; DBL Y; X = (INT)4; Y = (DBL)X;
ファイル$PROROOT/c/cpred.hは、新しい述語を定義したすべてのファイルにインクルードされていなければなりません。このファイルは、C述語を書くのに必要となる重要なマクロ定義と型宣言を含んでいます。cpred.hのリストは、このCインタフェース・マニュアルの最後にある付録の部分にあります。
以下のペ−ジでは、C述語の各関数について説明しています。わかりやすいプログラムをいくつか載せ、その結果も示しています。これらのプログラムは、ディレクトリ$PROROOT/demos/cに含まれています。
| scroll to top |
|