Страница 24 из 56
чальная установка параметров будет сохранена, выберите Compile/
Compile to OBJ. Турбо Си скомпилирует CSUM.C в выбранных режимах
в объектный модуль CSUM.OBJ.
2. Если вы предпочтете компилировать CSUM.C командной стро-
- 193,194 -
кой по стандарту DOS вместо использования меню Турбо Си, то после
приглашения операционной системы, введите
tcc -ml -O -c -u- -r- csum
Замечание: Турбо Пролог компилируется только в большой моде-
ли памяти, поэтому для обеспечения связи между Турбо Си и Турбо
Прологом вы должны использовать при компиляции опцию -ml.
Исходный файл Турбо Пролога : PROSUM.PRO
-----------------------------------------------------------------
global predicates
sum(integer,integer,integer) - (i,i,o) language c
/* описание аргументов функции суммирования
- sum определено как (i,i,o) и специфициру-
ет, что третий аргумент возвращает значе-
ние, а первые два принимают). */
goal sum(7,6,X),write("Sum=",X).
Компиляция PROSUM.PRO в PROSUM.OBJ
-----------------------------------------------------------------
После редактирования и сохранения PROSUM.PRO вам необходимо
откомпилировать его в обьектный (.OBJ) файл, который позволит
скомпоновать его с обьектным модулем Турбо Си. Чтобы сделать это,
выберите опцию Compile из главного меню Турбо Пролога, а затем -
OBJ File . Когда Турбо Пролог завершит компиляцию исходного файла
в обьектный файл, вы можете выполнить компоновку и запуск вашего
- 195,196 -
примера.
Компоновка CSUM.OBJ и PROSUM.OBJ
-----------------------------------------------------------------
Для компоновки модулей Турбо Пролога с модулями Турбо Си, вы
можете использовать или интегрированную среду Турбо Си, или ком-
поновщик TLINK (автономный компоновщик, включенный в ваш пакет
Турбо Си). За командой tlink следуют аргументы командной строки:
главные модули Турбо Пролога, набор других модулей, выходные фай-
лы и библиотеки. Кроме специально оговоренных случаев, они должны
следовать в следующем порядке:
Инициализация Турбо Пролога:
---------------------------
# INT.OBJ (модуль инициализации Турбо Пролога)
Главный модуль Турбо Пролога:
----------------------------
# главный модуль Турбо Пролога, который содержит раздел gоal
- 197,198 -
Набор модулей:
-------------
(эти модули не обязательно выстраивать в какой-то определен-
ный порядок)
# ассемблеровские .OBJ модули
# Турбо Си .OBJ модули
# Турбо Пролог .OBJ модули
Модуль таблицы идентификаторов:
------------------------------
# Имя основной таблицы идентификаторов Пролога (это обяза-
тельный параметр, он должен завершать список модулей)
Имя выходного файла
-------------------
# имя выполняемого файла, который будет создан
Библиотеки:
----------
# перечисляются все библиотеки, содержащие функции, необхо-
димые для компонуемых модулей. Последовательность важна: первыми
идут библиотеки, определяемые пользователями, затем PROLOG.LIB,
далее, если необходимо, EMU.LIB и MATHL.LIB, и наконец, CL.LIB.
В этом примере мы использовали программу компоновки Turbo
Link (обозначаемую как tlink) и передали ей следующие аргументы:
# Программы Турбо Пролога, INIT.OBJ и PROSUM.OBJ
# Объектный модуль Турбо Си CSUM.OBJ
# Таблицу идентификаторов PROSUM.SYM и выполняемый файл
TEST.EXE
# библиотеки PROLOG.LIB, CL.LIB (для работы с плавающей точ-
кой используйте EMU.LIB и MATHL.LIB)
Замечание: PROSUM.SYM является файлом, содержащим таблицу
имен и типов переменных, имеющихся в программе PROSUM.OBJ.
Ниже приведена командная строка для компоновки нашего перво-
- 199,200 -
го примера:
tlink init prosum csum prosum.sym, test.exe,,prolog+cl
Пример 2: Использование библиотеки математических функций
-----------------------------------------------------------------
Второй пример похож на первый, он демонстрирует, как записы-
ваются две функции на Турбо Си и как они комбинируются с програм-
мой на Турбо Прологе. Мы оформляем каждую из используемых функций
Турбо Си в виде отдельного исходного файла; CSUM1.C складывает
два действительных числа и возвращает сумму, а FACTRL.C вычисляет
факториал целого числа. Программа на Турбо Прологе FACTSUM.PRO
записывает результаты программы в два окна Пролога. Данный пример
использует библиотеку математических функций большой модели памя-
ти - MATHL.LIB.
И с х о д н ы й ф а й л Турбо Си: CSUM1.C
extern void zwf(char *format, ...);
void sum_0(double parml, double parm2, double *res_p)
{
*res_p=parm1+parm2;
zwf("Это функция суммирования: parm1=%f, parm2=%f, result=%f",
parm1,parm2,*res_p);
- 201,202 -