Страница 25 из 56
}
И с х о д н ы й ф а й л Турбо Си: FACTRL.C
void factorial_0(int top, double *result) /* Вычисляет
факториал */
{
double x;
int i;
if (top
makewindow(1,49,31,
"Окно взаимодействия Турбо Пролога с программами Турбо Си",
0,0,15,80),
makewindow(2,47,3,
"Окно Турбо Пролога для Турбо Пролог программы",
15,0,10,80),
/* Приглашение пользователя к первому вводу */
write("Введите целое число; Турбо Си вычислит факториал."),
readint(Int), nl,
shiftwindow(1), /* Переадресация окна вывода в окно Турбо
Си */
/* Вызов модуля Турбо Си factrl и вычисление факториала */
factorial(Int, Result),
shiftwindow(2), /* Переадресация окна вывода в окно Турбо
Пролога */
/* Приглашение пользователя ко второму вводу */
write("Введите действительное число для сложения с
факториалом"),
readreal(Real),nl,
shiftwindow(1), /* Переадресация окна вывода в окно Турбо
Си */
/* Вызов модуля Турбо Си сsum1 и вычисление суммы */
sum(Result,Real,Sum),
shiftwindow(2), /* Переадресация вывода в окно Турбо
Пролога */
/* Запись результата первого вычисления в окно */
write("Значение факториала числа ",Int," равно ",Result),nl,
/* Запись результата второго вычисления в окно */
write("Результат ", Result, " + ",Real," = ",Sum),nl.
- 207,208 -
Компиляция FACTSUM.PRO в FACTSUM.OBJ
-----------------------------------------------------------------
Также как и в первом примере вы должны откомпилировать файл
с исходным текстом на Турбо Прологе в обьектный файл (.OBJ) перед
компоновкой его с другими модулями. Перед тем как выполнить ком-
пиляцию, выберите из главного меню Турбо Пролога Оptions/Obj.
Компоновка СSUM1.OBJ, FACTRL.OBJ и FACTSUM.OBJ
-----------------------------------------------------------------
В команде на компоновку, используемой в этом примере,
- объектными модулями Турбо Пролога являются модули INIT.OBJ
и FACTSUM.OBJ;
- объектными модулями Турбо Си являются модули CSUM1.OBJ и
FACTRL.OBJ;
- именами выходных файлов являются FACTSUM.SYM (таблица
идентификаторов) и SUM.EXE (выполняемый файл);
- необходимыми библиотеками являются PROLOG.LIB, EMU.LIB,
MATHL.LIB и CL.LIB.
Приведенная ниже команда компонует модули:
tlink init factsum factrl csum1 factsum.sym,sum,,prolog
+emu+mathl+cl
Замечание: команда должна быть набрана в одной строке.
- 209,210 -
Пример 3: Шаблоны аргументов и распределение памяти.
-----------------------------------------------------------------
Следующая программа представляет код по созданию на Турбо
Прологе функтора (functor) и списка (list) в Турбо Си, а также
возвращению этих новых структур в Турбо Пролог. Этот пример также
демонстрирует возможное распределение памяти в глобальном стеке
Турбо Пролога. Списки представляют собой рекурсивные структуры из