logo
TurboProlog / Документация / TOM_2

Примеры.

Следующий пример программы представляет собой код для создания функ-

тора Турбо Пролога в Турбо Си и возврата этой структуры в Турбо Пролог.

Этот пример также демонстрирует, как может быть распределена память в

глобальном стеке Турбо Пролога.

Предикат pack принимает integer, char, real и string и комбинирует

их в составной объект пользовательского домена mydom.

Сперва рассмотрим исходный текст на Турбо Прологе:

/*Программа CH22EXO5.PRO*/

project "mypack"

global domains

mydom = f(integer, char, real, string)

global predicates

pack(integer, char, real, string, mydom) -(i,i,i,i,o)

language c

goal

pack(1, 'a', 99.9, "HELLO", X),

write(X), nl.

А теперь исходный текст на Турбо Си.

/*Программа CH22EXO6.C*/

void *alloc_gstack(unsigned);

typedet struct {

unsigned char functor; /*Type of functor*/

int ival; /*Value of the functor*/

char cval;

double rval;

char *sval;

} mydom;

pack_0(int P1, char P2, double P3, char **P4, mydom **P5)

{

mydom *p=*P4=alloc_gstack(sizeof(mydom));

p->functor=1;

p->ival=P1;

p->cval=P2;

p->rval=P3;

p->sval=P4;

}

Заметьте, как вызов alloc_gstack выделяет место в глобальном стеке

для структуры размером в sizeof(mydom) байт.

Система Турбо Пролог свяжет модули .OBJ для этих двух исходных, если

вы выберете Compile/Project, а файл .PRJ, MYPACK.PRJ, будет определен как

CH22EXO5

CH22EXO6