関数名 MkStructure MkeStructure MkvStructure 概要 #include "cpred.h"
TERM MkStructure(FUNCTOR, N, ARG1, . .・, ARGN ) char *FUNCTOR; int N; TERM ARG1, . .・,ARGN;
TERM MkeStructure(FUNCTOR, ARITY, ARG_POINTER) char *FUNCTOR; int ARITY; TERM **ARG_POINTER;
TERM MkvStructure(FUNCTOR, ARITY, ARG_POINTER) char *FUNCTOR; int ARITY; TERM *ARG_POINTER;
MkStructureグル−プの関数は、複合項を作ります。全ての要求に応えるために、少しずつ違いのある3つの関数があります。これらは、Prologの述語、functor/3 や =../2と同じものです。
MkStructureは、ユ−ザからARG1...ARGNの形で与えられた、N個のTERM型引数をもつ、アリティ−NのTERM型複合項を作ります。これらのTERMは、初期化されていなければなりません(たとえばMkVar(),IntCP()...を使って)。
MkeStructureは、後に単一化によって値が与えられるべき空の複合項を作ります。ARG_POINTERは、引数(項)の配列を示します。
MkvStructureは、引数がユ−ザのポインタによって与えられるような構造を作ります。 (次ペ−ジの例を参照して下さい。) 以下のファイルは、MkStructureの3つの形式を用いたC述語を含んでいます。それらはすべて同じ結果になり、複合項 "a(1,2)"を作ります。
/*-----------------------------------------------------*/ /* filename: $PROROOT/demos/c/mkstruct.c */ /* purpose : demonstrate and test various forms of */ /* Mkstructure */ /*-----------------------------------------------------*/ #include "cpred.h" int Cboot() { CPRIM("mktest",1,MK); CPRIM("mkvtest",1,MKv); CPRIM("mketest",1,MKe); } /*---------------------------------------------------*/ MK() { return UnifyArg(1,MkStructure("a",2,IntCP((INT) 1), IntCP((INT) 2) )); } /*---------------------------------------------------*/ MKv() { TERM structure_arg[2];
structure_arg[0] = IntCP((INT) 1); structure_arg[1] = IntCP((INT) 2); return UnifyArg(1, MkvStructure("a", 2, structure_arg )); } /*---------------------------------------------------*/ MKe() { TERM *structure_arg;
return UnifyArg(1, MkeStructure("a", 2, &structure_arg )) && Unify(structure_arg[0], IntCP((INT) 1)) && Unify(structure_arg[1], IntCP((INT) 2)); } /*---------------------------------------------------*/
?- mktest(S), mkvtest(V), mketest(E).
S = a(1,2) V = a(1,2) E = a(1,2)
yes ?-
| scroll to top |
|