![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программирование, Базы данных
Использование Prolog совместно с другими ЯП |
Понятие Dll. Вспомним процесс программирования в DOS. Преобразование исходного текста в машинный код включал в себя 2 процесса: компиляцию и линковку. Во время линковки в код программы помещались не только объявления функций и процедур, но и их полный код. В многозадачной среде подобный подход был бы весьма расточителен, так как огромное количество функций, отвечающих за прорисовку элементов пользовательского интерфейса, за обращение к системным ресурсам и т.п. дублировались в каждой программе. В качестве решения возникшей проблемы была предложена концепция динамической компоновки (см. рис. 1). рис 1. DLL (библиотека динамической связи) – файл, выступающий в качестве коллективной библиотеки предикатов, которые могут быть использованы одновременно в нескольких приложениях. Prolog способен генерировать DLL, включать DLL статически и загружать динамически. Вызов в программе на VP процедур и функций на других языках. Прежде чем вызвать процедуры и функции на других языках их нужно объявить как внешний предикат, упомянув, что он осуществляется на другом языке. При этом необходимо знать количество и порядок входных параметров:GLOBAL PREDICA ES procedure add(i eger A, i eger B, i eger C) – (i,i,o) la guage pascal Замечание: обратите внимание, что в VP явно указывается язык процедурыПередача входных/выходных параметров и возвращение значений. Размер входных параметров определен однозначно и зависит только от объявленного типа. Выходной параметр – 32 битный указатель на область памяти, где хранится выходное значение. Следует отметить, что функции на Pascal не могут возвращать значения в формате чисел с плавающей точкой, а функции C - структуры (но могут, конечно, возвращать указатели на них).Многочисленные декларации. Предикат VP может иметь различные комбинации входных/выходных параметров, и для каждой из них необходима отдельная процедура. Идентификаторы, используемые в Prolog должны совпадать с идентификаторами в библиотеке суффикс X, где X – целое число (порядковый номер процедуры, нумерация начинается с 0). Если существует только один вариант, то суффикс отсутствует. Рассмотрим пример: GLOBAL PREDICA ES sub rac io (i eger, i eger, i eger) – (i,i,o), (i,o,i), (o,i,i), (i,i,i) la guage C cha ge(i eger, i eger) – (i,o) la guage C GOAL sub rac io (2,2,X), wri e(“2-2=”,X), l, sub rac io (2,Y,5), wri e(“2-5=”,Y), l, sub rac io (Z,5,4), wri e(“5-4=”,X), l, sub rac io (2,2,5), wri e(“2-2 равно 5”), l, cha ge(5, Ch), wri e(Ch).Модуль, связываемый с этой программой должен содержать процедуры: sub rac io 0 (i x, i y, i z) { z=x-y;} sub rac io 1 (i x, i y, i z) { y=x-z;} sub rac io 2 (i x, i y, i z) { x=y-z;} sub rac io 3 (i x, i y, i z) {if ((x-y)!=z)RU Fail();} cha ge(i a, i b) { b=a;} Примечание: если процедура написана на языке C, то параметры заносятся в стек в обратном порядке (после возврата значений указатель автоматически корректируется VP), в противном случае, параметры заносятся в стек в нормальном порядке (см. таблицу 1). Форматы объектных файлов в Wi 32. Под Wi 32 используется 2 формата объектных файлов: OMF (объектно-модульный формат – используется, например, Borla d C ) и COFF (Общий объектно-файловый формат, используется, например, Visual C ).
При использовании файла в формате OMF имя предиката должно совпадать с именем функции. При использовании файла в формате COFF, к имени предиката добавляется знак подчеркивания, и после символа @ указывается количество байт, добавленных в стек (например, если предикат ame имеет 2 целых аргумента, то он должен быть объявлен как ame@8 (см. таблицу 1)). Установка указателя на стек. Существует два способа установки указателя на стек: при объявлении функции и при ее вызове. Так сложилось, что Pascal устанавливает указатель при объявлении функции, а С – при вызове (см. таблицу 1). Конвертирует имена в верхний регистр. Порядок аргументов прямой. Устанавливает указатель на стек при объявлении. Необходимость конвертировать имена в формат COFF. C - - - pascal s dcall - syscall - Таблица 1: вызов модулей из VP.Неавтоматическое обозначение внешних предикатов. Идентификатор процедуры или функции в VP не обязательно должен совпадать с идентификатором во внешнем модуле. В этом случае объявление такого предиката имеет вид: GLOBAL PREDICA ES add(i eger, i eger, i eger) – (i,o) la guage c as “ myadd@12”Эквивалентность типов. Большинство простых типов переменных в VP имеют эквиваленты в других языках программирования, однако размер резервируемой для них памяти может не совпадать (см. таблицу 2). Тип переменной Размер (Wi 32). char, by e 1 байт shor , word 2 байт lo g, dword 4 байт u sig ed, i eger 4 байт Real 8 байт Ref 4 байт Таблица 2: размер переменных в VP.Обработка списков. Ниже приведен пример программы, преобразующей список в массив, и затем вновь возвращающей данные в список. Программа Lis oArray на языке С преобразует список целых чисел в массив, записывает в стек элементы массива и возвращает количество элементов (массив и количество элементов передаются в программу как параметры). Преобразование списка проходит в 2 этапа: Просматривается список и находится количество элементов в нем. Целые числа из списка заносятся в массив, состоящий из известного количества элементов. / Program ls ar p.pro / projec &quo ;ls ar&quo ; global domai s ilis = i eger global predica es i clis (ilis ,ilis ) - (i,o) la guage c goal i clis (,L), wri e(L). / Program ls ar c.c / #defi elis f o 1 #defi e ilf o 2 ypedef u sig ed char BY E; void MEM AllocGS ack(u sig ed); ypedef s ruc ilis { BY E Fu c or; i Value; s ruc ilis ex ; } I LIS ; i Lis oArray(I LIS Lis ,i Resul Array) { I LIS SaveLis = Lis ; i Array, le ; regis er i ArrP; regis er i i; / количество элементов в списке / i = 0; while ( Lis ->Fu c or == lis f o ) { i ; Lis = Lis -> ex ; } le = i; Array = MEM AllocGS ack(i sizeof(i )); ArrP = Array; / перемещение элементов списка в массив / Lis = SaveLis ; while ( i != 0 ) { ArrP = Lis ->Value; Lis = Lis -> ex ; i--; } Resul Array = Array; re ur (le ); } void Array oLis (regis er i ArrP,regis er i ,regis er I LIS Lis PP) { while ( != 0 ) { Lis PP = MEM AllocGS ack(sizeof(I LIS )); ( Lis PP)->Fu c or = lis f o; ( Lis PP)->Value = ArrP ; Lis PP = &( Lis PP)-> ex ; --; } Lis PP = MEM AllocGS ack(sizeof(( Lis PP)->Fu c or));/ конец списка / ( Lis PP)->Fu c or = ilf o; } void i clis (I LIS I Lis ,I LIS Ou Lis ) { regis er i ArrP, i, le ; i Array; le = Lis oArray(I Lis ,&Array); ArrP = Array; for ( i = 0; i < le ; i ) ArrP ; Array oLis (Array,le ,Ou Lis ); }Вызов предикатов VP.
VP способен не только вызывать предикаты, но и предоставлять их другим программам. Ниже приведен пример вызова предиката prowi msg из программы на С: / Program hello p.pro / global predica es char prowi msg(s ri g) - (i) la guage c hello c - la guage c clauses prowi msg(S,C) :- wri e(S,&quo ; (press a y key)&quo ;), readchar(C). goal prowi msg(&quo ;Hello from PDC Prolog&quo ;), hello c. / Program hello c.c / char prowi msg(char ); void hello c() { while ( prowi msg(&quo ;Hello from C (press 'C')&quo ;) != 'C' ) ; }2003 Peche ki peche ki @poch am .ru www.cs.vsu.ru/~peche ki
Чем больше будет вклад каждого человека в общий фонд оплаты труда, тем больше будет и доля, приходящаяся на каждого. О количестве работников в данном случае говорить неуместно; если работников больше, то абсолютный размер фонда оплаты труда растёт, но ведь растёт и количество тех, кто имеет право на долю. Мы знаем, каков размер вклада в общий фонд от разных категорий работников: Вклад от сельскохозяйственных работников равняется общей сумме продуктов, которое это количество работников может вырастить на свободной земле – вычитаем из этой цифры транспортные расходы, процент на капитал и таможенные пошлины, которые мы поначалу учитываем в этой сумме. Вклад других производителей сырьевых материалов равен сумме продуктов, которые они могут доставить на рынок из самых бедных, отдалённых районов и посему, понятно, что этими районами (землёй там) никто не владеет – из этой суммы вычитаем процент на капитал. Вклад промышленных рабочих, торговцев, врачей и прочей интеллигенции и управленческого состава равен сумме продуктов, которые они могут произвести без использования преимуществ совместной работы, кооперации, близости друг к другу, как если бы они жили далеко от центров торговли и промышленности, т. е. городов – из этой суммы вычитаем тот же процент на капитал
2. Использование электронной почты, Internet, и других систем в целях рационализации документооборота
5. БАД к пище и их использование в бодибилдинге
9. Платежи за использование природных ресурсов
10. Банковские операции с использованием векселей
11. Авторский договор как основание правомерного использования произведения
12. Право собственности и другие вещные права
13. Анализ пенсионногозаконодательства Украины и других стран
14. Проблема нераспространения и не использования оружия массового уничтожения (ОМУ)
15. Налоговая система России в сравнении с другими странами
16. Прием и порядок переведения работника на другую работу
17. Отличие трудовых отношений от отношений других отраслей права
18. Земля как объект использования и охраны в Республике Молдова
19. Использование интегрированных курсов при изучении иностранного языка
21. Художественные средства и их использование в творчестве живописцев авангарда начала XX века
25. Использование художественной литературы на уроках истории
26. Неологизмы, их типы и стилистическое использование
27. Использование переносного значения слова для создания художественных тропов
28. Анализ стихотворения А.Ахматовой "И когда друг друга проклинали..."
29. П. А. Столыпин. Другие реформы
30. Работа с редактором Vi. Другие текстовые редакторы UNIX
31. Опыт и перспективы использования сети Интернет в коммерческих целях
32. Проблемы использования и пути развития интернет-компьютерных технологий в России
33. Использование Интернет-технологий для обеспечения информативности населения
35. Использование компьютеров в управлении предприятием
36. Возможности средств мультимедиа и перспективы их использования
37. Разработка информационно-справочной системы "Сводка погоды" /Prolog/
41. Задачи графических преобразований в приложениях моделирования с использованием ЭВМ
42. Объектно-ориентированное программирование на С с использованием библиотеки OpenGL
43. Различные классы баз данных по предметным областям использования
44. Принципы проектирования и использования многомерных баз данных
45. Программа сложной структуры с использованием меню
46. Кадры с использованием программы Microsoft Access 97
47. Использование макросов в MS Access 2000
48. Изучение взаимно влияющих друг на друга математических параметров
49. Графы. решение практических задач с использованием графов (С++)
50. Теоретический анализ эффективности использования операционной системы ЛИНУКС
51. Microsoft Outlook Express - установка и использование
52. Использование полей и закладок для редактирования и обработки информации в документах Word
58. Использование грибов в медицине (фунготерапия)
59. Использование ультрафиолета как современное бактерицидное средство.
60. Использование следов обуви в расследовании и раскрытии преступлений
61. Использование следов рук в расследовании и раскрытии преступлений
62. Использование фото и видео съемки в криминалистике
63. Использование компьютерных технологий в деятельности милиции
64. Рациональное использование водных ресурсов
65. Обеззараживание и обезвреживание с использованием окислителей природных, сточных вод и их осадклв
66. Использование солнечной энергии
67. Основы рационального использования природных ресурсов в условиях научно-технического прогресса
68. Принципы рационального использования лесов
69. Рациональное использование и охрана животных
75. Методические аспекты использования тестирования для текущего контроля знаний учащихся
78. Использование кабинета для внеклассной работы по иностранному языку
79. Использование элементов проблемного обучения в преподавании экологии
80. Использование художественной литературы на уроках истории и во внеклассной работе
81. Особенности использования дидактических игр при обучении в начальной школе
82. Проблемы использования и пути развития интернет-компьютерных технологий в России
83. Получение, использование цемента и его продуктов (Доклад)
84. Состояние и перспективы использования ветроэнергетики
85. Топливо. Его виды и характеристика. Области эффективного использования. Топливный баланс страны
90. Эффект Ганна и его использование, в диодах, работающих в генераторном режиме
91. Расчет характеристик обнаружения при совместном когерентном и некогерентном накоплении
93. Экономико-статистический анализ использования трудовых ресурсов в колхозе им. И.А. Плиева
94. Исследование и использование эффеката Кирлиан
95. Атомная энергетика. Использование и перспективы развития
96. Инфра и ультра звуки и их использование
97. Использование микробов в хозяйственной деятельности
98. Организационная основа использования физической культуры на детском курорте и общем курорте
99. Эффективность использования нестандартных спортивных сооружений в ВУЗах, школах