kprolog K-Prolog Compiler Version 6.0

C言語からの項の操作

C言語の関数から項の操作を行なうための関数群の定義は 以下のようになっています。実装がマクロになっているものがあることを あらかじめ御承知下さい。また、ヘダーファイル Pinterface.h は 古い C のスタイルで記述されています。

関数の使用例は、 JIPLの例にあります。

関数群は次のようなカテゴリに分けられています。


項の型の判定 int PisVar(CELL term) int PisAtom(CELL term) int PisInt(CELL term) int PisReal(CELL term) int PisAddr(CELL term) int PisCompound(CELL term) これらの関数は、term がそれぞれ変数/アトム/整数/浮動小数点数/アドレス/ 複合項である時に限り非0を返します。


数値の取得 int PvalueOfInt(CELL term) double PvalueOfReal(CELL term) char* PnumberToStr(CELL term) PvalueOfInt() は、整数termが単整数つまり長大整数でない時に その値を取得します。 PvalueOfReal() は、浮動小数点数termの値を取得します。 PnumberToStr() は、数値であるtermの文字列表現を返します。この関数が 長大整数を扱えることに注意して下さい。


複合項のアリティ、引数 int ParityOfCompound(CELL term) CELL PargOfCompound(CELL term, int n) ParityOfCompound() は、複合項termのアリティを返します。 PargOfCompound() は、複合項termのn(n=0...arity-1)番目の引数を返します。


アトムや項の表記への変換 char *PascOfFunc(CELL term) char *PascOfAtom(CELL term) char *PnameToAsc(CELL term) PascOfFunc() は、アトム又は複合項であるtermの関数子名を返します。 PascOfAtom()は、アトム又は文字列termの表記を返します。 PnameToAsc()は、任意の項termの表記を返します。


項と値の単一化 int Punify(CELL term1,CELL term2) int PuInt(CELL term,int i) int PuReal(CELL term,double d) int PuAddr(CELL term,void *a) int PuStr(CELL term,char *str) int PuAtom(CELL term,char *str) int PnameToTerm(char *str, CELL term) Punify() は、任意の項term1とterm2を単一化します。 PuInt() は、項termに整数 i を表す項を単一化します。 PuReal() は、項termに浮動小数点数 d を表す項を単一化します。 PuAddr() は、項termにアドレス a を表す項を単一化します。 PuStr() は、項termに文字列strを表すリストを単一化します。 PuAtom() は、項termに文字列strを表すアトムを単一化します。 PnameToTerm() は、文字列strをencodeした結果をtermに単一化します。


項の比較 int Pcompare(CELL term1,CELL term2) Pcompare() は、項term1とterm2が同じものである時に限り非0を返します。


項の生成 CELL PnewVar(void) CELL Patom(char *str) CELL Pfunctorn(CELL name, int arity) Pnewvar() は、新しい変数を生成します。 Patom() は、文字列strが表すアトムを生成して返します。 Pfunctorn() は、アリティarity、関数子名がアトムnameである 複合項を生成して返します。引数はすべて変数となります。 これらの関数は、項をグローバルスタック上に生成します。


リスト操作 int PisList(CELL term) int PisEndList(CELL term) int PlistLength(CELL term) CELL PlistCar(CELL term) CELL PlistCdr(CELL term) CELL Plistn(int length) PisList() は、termがリストである時に限り非0を返します。 PisEndList() は、termがリスト終端つまり、[]である時に限り非0を返します。 PlistLength() は、リストtermの長さを返します。 PlistCar() は、リストの最初の要素を返します。 PlistCdr() は、リストの最初の要素を除く残りのリストを返します。 Plistn() は、長さ n のリストをグローバルスタック上に生成します。


ゴールの実行 int PcallF(CELL term) PcallF() は、term を実行し成功した時に限り非0を返します。 実行は決定的に行なわれます。すなわち、 一度成功すると再試行はなされません。


項のヒープ領域へのコピー CELL PcopyTerm(CELL term) int PfreeTerm(CELL term) PcopyTerm() は、任意の項termをヒープ領域にコピーします。 コピーして生成したヒープ上の項は単一化の対象として使用できますが、 使用後は PfreeTerm() で解放しなければなりません。 PfreeTerm() は、ヒープ上の項termの領域を解放します。


一つ上に戻る 目次に戻る