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
?-
|