| ||||||||||
| MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003. For current customers, we continue to provide professional support for IF/Prolog until Dec 31, 2008. 関数名 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 ?- | ||||||||||
|
| 戻る> |
|