Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Описание языка ПРОЛОГ.DOC
Скачиваний:
18
Добавлен:
12.03.2015
Размер:
159.23 Кб
Скачать
  • Введение логического сервера

  • Запрос Пролога

  • Управление динамической базой данных

  • Преобразования следствия и терминов

  • Создание / получение типов Пролога

  • Управление струкШµрой

  • Здание расширенных предикатов

  • Управление списками

  • Обработка ошибок

    Класс LSException не имеет никаких методов и просто используется к сигнально при ловли ошибок как описано в секции 'Исключения'.

    Установка логического сервера

    Эти методы обеспечивают основные API услуги. Они используются для создания и закрытия окружение Пролога. Больше всего подобны их основе LSAPI эквиваленты, за исключением AddPred, который используется к определенным расширенным предикатам.

    Для AddPred, метод Java, который осуществляет предикат, определен с двумя параметрами имя метода и одну ссылку объекта. (AddPred не позволяет использование статических методов для расширенных предикатов

    public native void Init(String ININame) throws LSException;

    public native void Init2(String INIParms) throws LSException;

    public native void InitLSX(long Arg) throws LSException;

    public native void AddLSX(String LSXName, long Arg) throws LSException;

    public native void AddPred(String PredName, int Arity,

       String Class, String Method, Object Obj) throws LSException;

    public native void Load(String XPLName) throws LSException;

    public native boolean Main() throws LSException;

    public native void Reset() throws LSException;

    public native void Close() throws LSException;

    Запрос Пролога

    Запросы - функции, которые фактически вызывают предикаты в Прологе. Термин запроса может быть передан как строка или как термин Пролога. Методы возвращают термин с результатом или с 0, если вопрос потерпел неудачу.

    public native long Exec(long Term) throws LSException;

    public native long ExecStr(String Query) throws LSException;

    public native long Call(long Term) throws LSException;

    public native long CallStr(String Query) throws LSException;

    public native boolean Redo() throws LSException;

    public native void ClearCall() throws LSException;

    Динамическая база данных

    Эти функции помогут облегчить работу с ней.

    public native void Asserta(long Term) throws LSException;

    public native void Assertz(long Term) throws LSException;

    public native long Retract(long Term) throws LSException;

    public native void AssertaStr(String TermStr) throws LSException;

    public native void AssertzStr(String TermStr) throws LSException;

    public native boolean RetractStr(String TermStr) throws LSException;

    Преобразования следствия и терминов

    Эти функции преобразовывают строки к терминам и термины к строкам. 'Q' версия создает указанные строки когда они необходимы для атомов и строки, которые требуют символов разделения. Они необходимы для тех случаев, когда вы хотите использовать заканчивающуюся строку в другом вопросе.

    TermToStr особенно полезен во время создания программ, чтобы показывать результаты вопросов Пролога.

    public native String TermToStr(long Term, int Len) throws LSException;

    public native String TermToStrQ(long Term, int Len) throws LSException;

    public native long StrToTerm(String TermStr) throws LSException;

    public native int  StrTermLen(long Term) throws LSException;

    Создание / получение типов Пролога

    Эти функции отображают типы Пролога к типам Java.

    public native long MakeAtom(String AtomStr) throws LSException;

    public native long MakeStr(String Str) throws LSException;

    public native long MakeInt(int Num) throws LSException;

    public native long MakeFloat(double Num) throws LSException;

    public native int GetTermType(long Term) throws LSException;

    public native String GetStrTerm(long Term) throws LSException;

    public native int GetIntTerm(long Term) throws LSException;

    public native double GetFloatTerm(long Term) throws LSException;

    Структура управления

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

    public native String GetFunctor(long Term) throws LSException;

    public native int GetArity(long Term) throws LSException;

    public native long MakeFA(String Functor, int Arity) throws LSException;

    public native long GetArg(long Term, int Num) throws LSException;

    public native String GetStrArg(long Term, int Num) throws LSException;

    public native int GetIntArg(long Term, int Num) throws LSException;

    public native double GetFloatArg(long Term, int Num) throws LSException;

    public native long UnifyStrArg(long Term, int Num, String Str) throws LSException;

    public native long UnifyIntArg(long Term, int Num, int Val) throws LSException;

    public native long UnifyFloatArg(long Term, int Num, double Val) throws LSException;

    public native int GetArgType(long Term, int Num) throws LSException;

    public native int StrArgLen(long Term, int Num) throws LSException;

    Управление параметрами для расширенных предикатов

    Эти методы позволяют вам считывать и устанавливать параметры, которые используются Прологом в расширенных предикатов. Параметр термина используется, чтобы отличить их от функтора аргументов, хотя в чистой терминологии Пролога параметры - просто аргументы функтора расширенного предиката. Например, если вы используете расширенный предикат вызывающий get_url/1 в Java то, эти предикаты позволили бы вам объединять URL с первым параметром этого предиката.

    public native int GetParmType(int iarg) throws LSException;

    public native long GetParm(int iarg) throws LSException;

    public native String GetStrParm(int iarg) throws LSException;

    public native int GetIntParm(int iarg) throws LSException;

    public native double GetFloatParm(int iarg) throws LSException;

    public native boolean UnifyParm(int iarg, long Term) throws LSException;

    public native boolean UnifyStrParm(int iarg, String s) throws LSException;

    public native boolean UnifyIntParm(int iarg, int i) throws LSException;

    public native boolean UnifyFloatParm(int iarg, double f) throws LSException;

    Управления списками

    Эти методы позволяют вам создавать списки Пролога, добавлять пункты к спискам и считывать пункты из списков. Полученное семейство глав - функций можно использоваться в циклах, чтобы получить все пункты из списка.

    public native long MakeList() throws LSException;

    public native long PushList(long ListTerm, long Term) throws LSException;

    public native long GetHead(long ListTerm) throws LSException;

    public native String GetStrHead(long ListTerm) throws LSException;

    public native int GetIntHead(long ListTerm) throws LSException;

    public native double GetFloatHead(long ListTerm) throws LSException;

    public native long GetTail(long ListTerm) throws LSException;

    Обработка ошибок

    Все эти методы осуществлены как часть класса LSException, и позволяют вам получать детали по поводу ошибок.

    public native int GetType();

    public native int GetRC();

    public native int GetLineno();

    public native String GetMsg();

    public native String GetReadFileName();

    public native String GetReadBuffer();

    public native String GetCallStack();

    Чтобы вызывать API функцию от Access, Word или Excel, вам необходимо добавить AMZIVB.BAS к модулю исходного текста в вашей программе.

    Компоненты Delphi

    Delphi - компонент логического сервера обеспечивает оболочку для логического сервере, который представляет логический сервер в виде более совместимом с Delphi.

    Компонент логического сервера включает:

  • составной объект, который обеспечивает ядро логического сервера,

  • методы, которые соответствуют API функциям логического сервера,

  • автоматическое отображение от Си-строк к строкам Паскаля,

  • использование обработки Delphi для исключения API ошибок,

  • интерфейсы функции / процедур Delphi-like.

    Разделы этого документа включают:

  • Краткий обзор - концептуальный краткий обзор логического сервера версии Delphi.

  • Использование компонента - Как использовать логический сервер от Delphi.

  • Осуществление расширенных предикатов - Как добавлять в Пролог расширенные предикаты, написанные в Delphi.

  • Ссылка - Полный листинг всех запросов функции Delphi Logic Server.

  • Пример - более законченный пример, показывающий множество особенностей логического сервера, связанного с различными кнопками на форме.

    Краткий обзор

    Логический сервер Amzi, Delphi компонента (TLSEngine) предназначена для того, чтобы дать свободный подход программисту к услугам Delphi, обеспеченным логическим сервером DLL.

    Компонент логического сервера находится в исходной форме в файле amzi4.PAS. Вы можете создавать ваши собственные компоненты на её базе или создавать вашу собственную версию из этой копии.

    Когда вы сравниваете методы компонентов, вы увидите, что они расширяются, и в некоторых случаях изменяют родных функциях LSAPI.

    Различия:

  • Все функции скрыты как методы в объекте типа TComponent.

  • Имена не имеют начальный ls, это сделано для прямых запросов DLL.

  • Методы не берут двигатель ID как параметр, который обработан в пределах компоненты.

  • Три разлfных имени: CloseLS, InitLS, и LoadXPL, избегать замешательства с обычными именами методов Close, Init, и Load.

  • Функцию Many, типа LoadXPL, берут как параметры на Паскале быстрее чем на Cи.

  • Методы не возвращают коды ошибки. Ошибки обработанные в пределах компоненты используются обработкой исключения Delphi.

  • Функции Many - теперь процедуры, потому что они не должны возвратить коды ошибки.

  • Имеются многочисленные новые функции, которые обеспечивают дополнение интерфейса Паскаля к интерфейсу Си, типа CallPStr, который делает запрос из Паскаля.

  • Имеются многочисленные новые функции с типами, обозначенными в их именах, которые увеличивают большее количество общего динамического вывода и указателей API запросов. Например, lsGetArg берет как параметр целевой тип и указатель на этот тип. Delphi компоненты имеют функции типа GetPStrArg, которые просто возвращают значение строки.

    Использование Компонент

    Включать логический сервер в приложение очень просто, его размещают в компоненте логического сервера, в странице Дополнений на форме. Оно станет типичной частью главной формы.

    Вы можете также сделать это вручную, включением 'Amzi' в разделе использование модуля и создания переменной для логического сервера, типа LSEng: TLSEngine. Если вы это делаете, удостоверитесь в правильности в случаях создания или уничтожения логического сервера.

    Вызывать логический сервер просто, включите API функции, вызовите ваше приложения. Вы также будете должны открыть и закрыть логический сервер.

    Осуществление расширенных предикатов

    Delphi, подобно C/C ++, Java и VB 5.0, может использоваться для того, чтобы осуществить нужное расширение предикатов к языку Пролог. Эти расширения дают Прологу, способность непосредственно обратиться к чему - либо, что Delphi может позволить.

    Функции Delphi, которые осуществляют расширенные предикатов, должны быть объявлены как возвращающие тип TTFi. Они могут быть добавлены по одному, избегая указателей на массивы, используя функцию API AddPred, которая добавляет одиночный предикат.

    Примечание: Определения расширенного предиката должно всегда добавляться после запроса InitLS и перед запросом LoadXPL.

    Примечание: 32-разрядный Логический Сервер DLL использует соглашение о вызовах так, чтобы были определены расширенные предикаты.

    Образец находится в каталоге \SAMPLES\DELPHI\DELTEST включает примеры множества способностей Логического сервера, включая определения расширенных предикатов. \SAMPLES\DELPHI\DELGUI содержит комплект инструментов множества расширенных предикатов, которые обеспечивают различные GUI услуги в Прологе.

    Ссылки

    Этот раздел содержит часть модуля AMZI4. PAS, который определяет компонент логический сервера. Вы можете просмотреть исходный текст.

  • Типы логического сервера

  • Функции для создать логического сервера

  • Функции для расширения предикатов

  • Функции для пролога

  • Функции для динамической базы данных

  • Функции для преобразования срок

  • Функции для создания / получения типов Пролога

  • Функции для управления структурами

  • Функции для управления списками

  • Функции для ввода - вывода Пролога

  • Разные функции Delphi

    Типы логического сервера

    Типы логического сервера – это простое определения типа, используемые логическим сервером. Они отображены к типам API при запросе DLL. См. \AMZI4\INCLUDE\AMZI4. PAS.

    const

      lsfalse: integer = 0;

      lstrue:  integer = 1;

    type

      ELogicServer = class(Exception);

      { Various types used by the Logic Server API calls }

      TTerm = pointer;  { The basic Prolog term }

      { Enumerated Prolog types and enumerated Delphi types, used for mapping

        Prolog types to Delphi types }

      TPType = (pATOM, pINT, pSTR, pFLOAT, pSTRUCT, pLIST, pTERM, pADDR, pVAR);

      TDType = (dATOM, dSTR, dINT, dLONG, dSHORT, dFLOAT, dDOUBLE, dADDR, dTERM);

      TTypeInt = integer; { Generic type for casting types in DLL calls }

      { Enumerated stream identifier, used when redirecting Prolog I/O }

      TPStream = (CUR_IN, CUR_OUT, CUR_ERR, USER_IN, USER_OUT, USER_ERR);

      TPStreamInt = integer; { Generic type for stream identifiers in DLL calls}

      TTFi = integer;  { Prolog T/F or error code return code }

      TRC = integer;  { Integer return code }

      TArity = Word;  { The arity of a functor }

      TEngID = longint;  { ID for Engine, only one allowed now }

      TExtPred = function(EngID: TEngID): TTFi;  { An extended predicate function }

      TPutC = procedure(c: Integer);

      TPutS = procedure(s: PChar);

      TGetC = function: Integer;

      TUngetC = procedure;

      TPredInit = record

        Pname: PChar;

        Parity: TArity;

        Pfunc: TExtPred;

      end;

      TPredInitPtr = ^TPredInit;

    Создание логического сервера

    Эти функции обеспечивают основные API услуги. Они используются, для инициализировать и закрытия среды Пролога. Функция, Main, управляет предикатом загрузки файла Пролога main/0.

    InitLS, LoadXPL и CloseLS предпочтены форме для Delphi, чтобы избежать конфликтов имени с другими компонентами с подобными именами.

    procedure Init(xplname: String);

    procedure InitLS(xplname: String);

    procedure InitLSXP(p: pointer);

    procedure InitLSX;

    procedure AddLSX(lsxname: String);

    procedure AddPred(pname: String; parity: TArity; pfunc: TExtPred);

    procedure InitPreds(PIptr: TPredInitPtr);

    procedure Load(xplname: String);

    procedure LoadXPL(xplname: String);

    function Main: Boolean;

    procedure Reset;

    procedure CloseLS;

    Они основаны на функциях API lsInit, lsInitLSX, lsAddLSX, lsAddPred, lsInitPreds, lsLoad, lsMain, lsReset, и lsClose.

    Расширенные Предикаты

    Когда вы пишете расширенные предикаты, вы можете непосредственно управлять параметрами Пролога для той функции. Эти предикаты обеспечивают это обслуживание. Полученная группа отыскивает n-ый параметр, который использовался в запросе, и объединяет некоторый вычисленный результат с n-ым параметром.

    Интерфейс Delphi содержит множество определенных типов, дополнений к основному API. Функции типа GetLongParm и UnifyPStrParm - примеры.

    procedure GetParm(n: integer; dt: TDType; p: pointer);

    function GetPStrParm(n: integer): string;

    function GetIntParm(n: integer): integer;

    function GetLongParm(n: integer): longint;

    function GetShortParm(n: integer): longint; {32-bit only}

    function GetFloatParm(n: integer): double;

    function GetParmType(n: integer): TPType;

    function StrParmLen(n: integer): integer;

    function UnifyParm(n: integer; dt: TDType; p: pointer): Boolean;

    function UnifyPStrParm(n: integer; s: string): Boolean;

    function UnifyAtomParm(n: integer; s: string): Boolean;

    function UnifyIntParm(n: integer; i: integer): Boolean;

    function UnifyLongParm(n: integer; i: longint): Boolean;

    function UnifyShortParm(n: integer; i: integer): Boolean; {32-bit only}

    function UnifyFloatParm(n: integer; f: double): Boolean;

    Эти функции основаны на функциях API lsGetParm, lsGetParmType, lsUnifyParm, и lsStrParmLen.

    Запросы Пролога

    Запросы - функции, которые фактически вызывают предикаты в Прологе logicbase / program. Термин запроса может быть передан как строка или как термин Пролога. Первый параметр, термин, всегда объединяется с результатом запроса. Функция Redo вводит backtracking, который повторно объединяет термин со следующим результатом.

    ClearCall полезен только, если вы запускаете петлю и не заканчиваете ее. Это очищает стек.

    'PStr' версия функциональных запросов, использует строки из Паскаля.

    function Exec(var tp: TTerm): Boolean;

    function ExecStr(var tp: TTerm; s: PChar): Boolean;

    function ExecPStr(var tp: TTerm; s: string): Boolean;

    function Call(var tp: TTerm): Boolean;

    function CallStr(var tp: TTerm; s: PChar): Boolean;

    function CallPStr(var tp: TTerm; s: string): Boolean;

    function Redo: Boolean;

    procedure ClearCall;

    Эти функции основаны на функциях API lsExec, lsExecStr, lsCall, lsCallStr, lsRedo, и lsClearCall.

    Динамическая база данных

    Эти функции помогут облегчить работу с ней. 'Pstr' использует строки Паскаля.

    procedure Asserta(t: TTerm);

    procedure Assertz(t: TTerm);

    procedure Retract(t: TTerm);

    procedure AssertaStr(s: PChar);

    procedure AssertzStr(s: PChar);

    procedure RetractStr(s: PChar);

    procedure AssertaPStr(s: string);

    procedure AssertzPStr(s: string);

    procedure RetractPStr(s: string);

    Эти функции основаны на функциях API lsAsserta, lsAssertaStr, lsAssertz, lsAssertzStr, и lsRetract.

    Преобразования срок

    Эти функции преобразовывают строки к терминам и термины к строкам. Версии 'PStr' используют строки Паскаля.

    procedure TermToStr(t: TTerm; s: PChar; n: integer);

  • procedure TermToStrQ(t: TTerm; s: PChar; n: integer);

    procedure StrToTerm(var tp: TTerm; s: PChar);

    function TermToPStr(t: TTerm): string;

    function TermToPStrQ(t: TTerm): string;

    procedure PStrToTerm(var tp: TTerm; s: string);

    Эти функции основаны на функциях API lsTermToStr, lsTermToStrQ, и lsStrToTerm.

    Создание / получение Типов Пролога

    Эти функции отображают типы Пролога к типам Delphi. Тип-определенные функции Get - Delphi дополнения.

    procedure MakeAtom(var tp: TTerm; s: string);

    procedure MakeStr(var tp: TTerm; s: PChar);

    procedure MakePStr(var tp: TTerm; s: string);

    procedure MakeInt(var tp: TTerm; i: longint);

    procedure MakeFloat(var tp: TTerm; f: double);

    procedure MakeAddr(var tp: TTerm; p: pointer);

    function GetTermType(t: TTerm): TPType;

    procedure GetTerm(t: TTerm; dt: TDType; p: pointer);

    function GetPStrTerm(t: TTerm): string;

    function GetIntTerm(t: TTerm): integer;

    function GetLongTerm(t: TTerm): longint;

    function GetShortTerm(t: TTerm): longint; {32-bit only}

    function GetFloatTerm(t: TTerm): double;

    Эти функции основаны на функциях API lsMakeAtom, lsMakeStr, lsMakeInt, lsMakeFloat, lsMakeAddr, lsGetTermType, и lsGetTerm.

    Структуры управления

    В этом Прологе управляющая структура функции позволяют вам создавать и удалять термины которые являются основной структурой. Это особенность полезна для получения различных параметров в запросе. В типовом примере, имеется запрос 'родной брат (Мэри, X)'. Функция GetPStrArg может использоваться, чтобы получить второй параметр этой структуры, после того, как CallPStr связал переменную. (См. типовой пример.)

    procedure GetFA(t: TTerm; var s: string; var ap: TArity);

    function GetFunctor(t: TTerm): string;

    function GetArity(t: TTerm): integer;

    procedure MakeFA(var tp: TTerm; s: string; a: TArity);

    function UnifyArg(var tp: TTerm; n: integer; dt: TDType; p: pointer): Boolean;

    function UnifyPStrArg(var tp: TTerm; n: integer; s: string): Boolean;

    function UnifyAtomArg(var tp: TTerm; n: integer; s: string): Boolean;

    function UnifyIntArg(var tp: TTerm; n: integer; i: integer): Boolean;

    function UnifyLongArg(var tp: TTerm; n: integer; i: longint): Boolean;

    function UnifyShortArg(var tp: TTerm; n: integer; i: longint): Boolean; {32-bit only}

    function UnifyFloatArg(var tp: TTerm; n: integer; f: double): Boolean;

    procedure GetArg(t: TTerm; n: integer; dt: TDType; p: pointer);

    function GetPStrArg(t: TTerm; n: integer): string;

    function GetIntArg(t: TTerm; n: integer): integer;

    function GetLongArg(t: TTerm; n: integer): longint;

    function GetShortArg(t: TTerm; n: integer): longint; {32-bit only}

    function GetFloatArg(t: TTerm; n: integer): double;

    function GetArgType(t: TTerm; n: integer): TPType;

    function StrArgLen(t: TTerm; i: integer): integer;

    function Unify(t1: TTerm; t2: TTerm): Boolean;

    Эти функции основаны на функциях API lsGetFA, lsMakeFA, lsUnifyArg, lsGetArg, lsGetArgType, lsStrArgLen, и lsUnify.

    Списки управления

    Эти функции манипуляции списка, позволяют вам создавать списки, добавлять элементы к спискам и отыскивать элементы в списках. Семейство функций PopList может использоваться в петлях, чтобы получить все элементы списка. Обратите внимание, что, PopList не вызывает работу Пролога и это не возвращает тип Boolean. Это возвращает нормальный функциональный код возвращения, в котором 0 означает успех и сообщение указывающие, что конец списка был достигнут. (См. типовой пример.)

    procedure MakeList(var tp: TTerm);

    procedure PushList(var tp: TTerm; t: TTerm);

    function PopList(var tp: TTerm; dt: TDType; p: pointer): TRC;

    function PopPStrList(var tp: TTerm; var s: string): TRC;

    function PopIntList(var tp: TTerm; var i: integer): TRC;

    function PopLongList(var tp: TTerm; var i: longint): TRC;

    function PopShortList(var tp: TTerm; var i: longint): TRC; {32-bit only}

    function PopFloatList(var tp: TTerm; var f: double): TRC;

    Эти функции основаны на функциях API lsMakeList, lsPushList, и lsPopList.

    Ввод - вывод Пролога

    Эти функции позволяют Вам очищать с экрана и переадресовывать ввод - вывод Пролога.

    procedure SetStream(st: TPStream; i: integer);

    function GetStream(st: TPStream): integer;

    procedure SetInput(pfunc1: TGetC; pfunc2: TUngetC);

    procedure SetOutput(pfunc1: TPutC; pfunc2: TPutS);

    Эти функции основаны на функциях API lsSetStream, lsGetStream, lsSetInput, и lsSetOutput.

    Разные Функции

    Разные функции используются чтобы изменить потоки Пролога, получить номер версии и работать с кодами ошибок Пролога.

    procedure SetStream(st: TPStream; i: integer);

    function GetStream(st: TPStream): integer;

    procedure GetVersion(var s: string);

    function GetPVersion: string;

    procedure ErrMsg(s: PChar);

    function ErrPMsg: string;

    procedure ErrRaise(s: PChar);

    procedure ErrReadBuf(var i: LongInt; s: PChar);

    Эти функции основаны на функциях API lsSetStream, lsGetStream, lsGetVersion, lsErrMsg, lsErrRaise, и lsErrReadBuf.

    Class C++

    В Amzi! 4.0 ядро осуществлено, используя C++. Внутренне ядро Пролога является объект C++ с функциями, которые обеспечивают работу логического сервера API. Имеются два интерфейса.

    Постоянный – стандартный логический сервер API запросов, согласно того как зарегистрировано в разделе LSAPI этого руководства. Второй – C++, CLogicServer, который обеспечивает внешний интерфейс к внутреннему объекту. Программисты C++ могут использовать любой интерфейс, но CLogicServer предпочтительней по понятным причинам.

    C++ интерфейс также включает класс CLSException. Случай когда этот класс не используется это когда Си входит в противоречия с логическим сервером по поводу исключения. Программисты C++ должен использовать, пробуют, вылавливать исключения логического сервера (в отличие от функционального LSAPI, который использует коды возвращения для обработки исключения).

    Чтобы использовать логический сервер от C++, приложение должно включить файл AMZI4.H и связаться с соответствующей библиотекой:

  • AMZI4.LIB для Microsoft Visual C++ приложений,

  • AMZI4B.LIB для Borland C++ приложения,

  • AMZI4C.LIB для приложений управления, которые используют Пролог.

    Обратите внимание: классы CLogicServer и CLSException экспортируются от, AMZI4.DLL но к ним можно только обращаться от Visual Microsoft C ++. По этой причине, AMZI4.H содержит дополнительное определение CLogicServer и CLSException, который является оболочкой на функциональных запросах LSAPI. AMZI4.H использует #IFDEFs, основанный на флажках компилятора, для определения версии которую вы используете

    Hello Prolog

    Имеется множество версий образца Hello Пролог в подкаталоге SAMPLES\CPP\HELLO

  • Borland5 - Borland C++ выполнение версии 5.0. Обратите внимание, чтобы использовать версию Borland вы должны связаться с файлом \LIB\AMZI4B.LIB.

  • Управление - Microsoft VC++ выполнение управление.

  • Диалог - Microsoft VC++ MFC выполнение.

    Многократный ClogicServers

    Каждый раз создавая новый CLogicServer, вы создаете новый вариант ядра Amzi! Пролога. Вы можете выполнять одновременных столько логических серверов, на сколько ваша машина может вам позволить.

    Осуществление Расширения Предикатов

    Расширенные предикаты (предикаты Пролога, которые вы осуществляете в C/C++) осуществляете как функции отзыва. То есть вы передаете функциональный указатель на логический сервер. Когда Пролог сталкивается с этим предикатом, то вызывает функцию которую вы создали.

    Логический сервер API поддерживает следующее варианты. Это позволяет вам создавать определенные расширенные предикаты, которые включают имя предиката, функциональный указатель и параметр. Этот параметр может быть чем угодно. Но если указатель объекта создает функцию, то функция может использовать этот указатель, чтобы послать запрос к соответствующей функции вашего объект C++.

    Образец в SAMPLES\CPP\PETSCB иллюстрирует эту методику.

    Поддержка Unicode

    CLogicServer и CLSException перегружены функциями LSAPI, которые имеют символьные строки как возвращаемые значения или параметры. Вы можете обращаться к ним, используя строки char* или wchar_t* (Unicode).

    Функции mbstowcs() и wcstombs() используются, чтобы преобразовать между широкими и мультибайтными (ANSI), и наборы символов мультибайта могут также использоваться с Логическим Сервером.

    Модуль Visual Basic

    Этот документ рассказывает о модуле логического сервера - Visual Basic (VB). Этот модуль обеспечивает интерфейс в логическом сервере (DLL), который представляет его в виде совместимого с использование VB. Оно включает:

  • VB Модуль, что encapsulates ядро логического сервера,

  • Автоматический отображающие от Си - строк к строкам VB,

  • Автоматическую обработку ошибок используя обычный, установившийся порядок.

    Документация организована следующим образом:

  • Привет Пролог - Получение примера для Пролога и выполнение его в Visual Basic.

  • Краткий обзор - Краткий обзор Visual Basic охватывает функции для логического сервера.

  • Использование модуля - Как вызывать логический сервер от Visual Basic.

  • Осуществление расширение предиUХтов - Как добавлять к Прологу расширенные предикаты, написанные в VB 5.0.

  • Ссылка - Законченный листинг всех функций логического сервера Visual Basic.

  • Пример - более законченный пример Visual Basic, иллюстрирующий разнообразие функций логического сервера.

    Привет Пролог

    HELLO.VBP пример Visual Basic находится в каталоге SAMPLES\VB \\ HELLO для VB 4.0. Он состоит из формы, HELLO.FRM и файла определений логического сервера, AMZI4. BAS.

    Форма имеет одиночную кнопку, к которой приложен весь текст. Текст инициализирует среду Пролога и вызывает предикат hello/2. Проверяется состояния ошибок, и если все - хорошо выдается в окнах два сообщения о состояния и возвращенное приветствие от HELLO.PRO

    Выполнение, открыть проект в Visual Basic и выбирать Run/Start. Нажмите кнопку 'приветствуют меня!', затем нажимает «ввод» или щелкают мышь по каждому из трех окон, будет сообщения OK.

    Логический сервер модуля VB осуществлен в файле .BAS в подкаталоге INCLUDE. Вы используете его, просто добавляя файл к вашему проекту.

    Краткий обзор

    Модуль VB логического сервера предназначен для того, чтобы дать программисту свободный проход к VB, обеспеченным логическим сервером DLL.

    Логический сервер - ядро, подобно основе базы данных. Когда вы включаете логический сервер в ваше приложение, вы действительно включаете ядро логического сервера. Это ядро знает, как обратиться к компилируемому и динамическому коду Пролога. На логическом сервере обеспечивается API функциями, которые позволяют вам:

  • Инициализировать и закрывать ядро, также как загружать и выполните программу Пролога,

  • Утверждать и отрекаться динамически от логических терминов,

  • Изложить логические запросы, отыскать все ответы,

  • Использовать интуитивный поиск строк для связи,

  • Использовать манипуляции терминов для связи,

  • Отыскать ошибки процесса.

    Модуль VB, логический сервер распределен в исходной форме в файле .BAS. Вы можете создавать ваши собственные функции VB на этой основе или изменять непосредственно функции покрытия. (Если у вас есть идеи для улучшения интерфейса, пожалуйста сообщите производителю, и мы включим его в модуль VB в более позднем выпуске.)

    Модуль VB многое сохраняет из чистого API, насколько это возможно, и делает это для обеспечения VB-подобный интерфейсов.

    Использование модуля

    Включить логический сервер в приложение просто, добавьте модуль VB, логический сервер, AMZI4.BAS, к вашему проекту.

    Вызвать логический сервер просто, включите API, вызовите функцию вашего приложения. Вам нужно открыть и закрыть логический сервер. Следующий пример открывает логический сервер, загружает компилируемый файл Пролога, выполняет простой запрос и закрывает логический сервер.

    Dim s as String, term as long

    Call InitLS("")

    Call LoadLS ("hello")

    tf = CallStrLS(term, "hello(vb, X)")

    Call GetArgLS(term, 2, bSTR, s)

    Call CloseLS

    Этот пример принимает программу Пролога HELLO.PRO. Это предполагает, что HELLO.PRO компилировался и связан для создания HELLO.XPL, и этот файл находится в текущем каталоге. См. Amzi! Пролог + руководство логическое сервера для получения дополнительной информации для компилировании и соединении программы Пролога.

    Осуществление расширения предикатов

    Visual Basic 5.0, подобно C/C++, Java и Delphi, может использоваться для осуществления специальных расширений предикатов к языку Пролог. Эти расширения дают Прологу способность непосредственно обратиться к чему – ни будь через Visual Basic.

    Функции VB, которые осуществляют расширение предикатов, должны находится в их собственном модуле, объявленном как возвращающее целое число. Например:

    Public Function PMsgBox(ByVal EngineID As Long) As Integer

    Функция расширенного предиката возвращает 1 при успехе (истина) и 0 при неудачи (лож).

    Предикаты добавлены по одному, используя функцию VB~module AddPredLS.

    Примечание: Определения расширенного предиката должны всегда добавляться после запроса InitLS и перед запросом LoadLS.

    Образец в каталоге \SAMPLES\VB\EXTPRED включает простой пример добавления предиката msgbox к Прологу.

    Ссылка

    Этот раздел содержит часть интерфейса модуля AMZI4.BAS, который определяет модуль VB, логического сервера. Вы можете просмотреть исходный текст.

  • Константы логического сервера

  • Функции, для установки логический сервера

  • Функции для расширения предикатов

  • Функции для Звонящего Пролога

  • Функции для динамической базы данных

  • Функции для преобразование строк

  • Функции для создания / получения типов Пролога

  • Функции для управления структурами

  • Функции для управления списками

  • Разные Функции