sitelogo
複合項の作成
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 ?-


Up read on...
scroll to top managed with ubiCMS