Изучить материал по теме «Компонент LSEngine»
Порядок выполнения работы
1. Решить задачу соответствующего варианта.
2. Подобрать тестовые данные и протестировать программу на компьютере.
3. Составить отчет о проделанной работе.
Задание и методические рекомендации
Amzi! Prolog не предоставляет достаточно удобного интерфейса для работы с базой данных. Но возможности языка Amzi! Prolog можно использовать и в других языках и средах программирования, например Borland Delphi. В состав пакета Amzi! Prolog входит компонент, написанный для использования в Delphi (LSEngine). С помощью свойств и методов этого компонента разработчик приложения может производить запросы к откомпилированной базе данных Пролога.
Для работы с базой данных на Прологе в среде Delphi данный компонент необходимо поместить на форму приложения.
Этот компонент содержит большое количество методов, позволяющих производить запросы, модифицировать динамическую базу данных, работать с потоками и т.п. Ниже приведены часто используемые процедуры и функции для работы с компонентом LSEngine.
Процедуры для подключения Пролога к приложению
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 Close;– закрытие базы;
procedure CloseLS;– закрытие базы.
Функции и параметры предикатов
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;– получение параметра типа короткое целое;
function GetFloatParm(n: integer): single;– получение параметра вещественного типа;
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: longint): Boolean;– унификация параметра типа короткое целое;
function Un ifyFloatParm(n: integer; f: single): Boolean;– унификация параметра вещественного типа.
Вызов Пролога из Delphi
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 Red o: Boolean;– восстановление;
procedure ClearCall;– очистка стека вызовов.
Добавление и удаление фактов из динамической базы данных
procedure Asserta(t: TTerm);– выполнение предиката Asserta;
procedure Assertz(t: TTerm);– выполнение предиката Assertz;
procedure Retract(t: TTerm);– выполнение предиката Retract;
procedure AssertaStr(s: PChar);– выполнение предиката Asserta над строковой записью;
procedure AssertzStr(s: PChar);– выполнение предиката Assertz над строковой записью;
procedure RetractStr(s: PChar);– выполнение предиката Retract над строковой записью;
procedure AssertaPStr(s: string);– выполнение предиката Asserta над строковой записью;
procedure AssertzPStr(s: string);– выполнение предиката Assertz над строковой записью;
procedure RetractPStr(s: string);– выполнение предиката Retract над строковой записью.
Преобразование строк и термов
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);– преобразование строки в терм.
Создание типов Пролога
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: Single);– создание вещественного типа;
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;– получение значения терма типа короткое целое;
function GetFloatTerm(t: TTerm): single;– получение значения терма вещественного типа.
Работа с функторами
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;– унификация аргумента типа короткое целое;
function UnifyFloatArg(var tp: TTerm; n: integer; f: single): 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;– получение аргумента типа короткое целое;
function GetFloatArg(t: TTerm; n: integer): single;– получение аргумента вещественного типа;
function GetArgType(t: TTerm; n: integer): TPType;– получение типа аргумента;
function StrArgLen(t: TTerm; i: integer): integer;– получение длины строкового аргумента;
function Unify(t1: TTerm; t2: TTerm): Boolean;– выполнение унификации.
Работа со списком
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;– извлечение элемента типа короткое целое из списка;
function PopFloatList(var tp: TTerm; var f: single): TRC;– извлечение элемента вещественного типа.
Работа с потоками
procedure SetStream(st: TPStream; i: integer);– открытие потока;
function GetStream(st: TPStream): integer;– получение потока;
procedure SetInput(pfunc1: TGetC; pfunc2: TUngetC);– установка вводного потока;
procedure SetOutput(pfunc1: TPutC; pfunc2: TPutS);– установка выводного потока;