|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Контрольный пример. Программа добавляет и удаляет из базы данных новый факт
Программа добавляет и удаляет из базы данных новый факт.
add:- write('Введите имя мужчины: '), read_string(S), assertz(man(S)).
out:- write('Список имен мужчин:\n'), man(S),write(S),nl.
del:- write('Введите имя мужчины: '), read_string(S), retractall(man(S)).
main:- consult('db.pro'),add,out,del,out.
Файл db.pro первоначально содержит следующие факты:
man(oleg). woman(zina). man(alexandr). man(petr).
Задание к работе
1. Составить программу, которая решает задачу соответствующего варианта. 2. Подобрать тестовые данные, проверяющие работу программы. 3. Провести анализ ошибок и полученных результатов, составить отчет о проделанной работе.
Лабораторная работа № 6 Использование возможностей логического сервера AMZI! Prolog в среде Delphi
Цель работы
1. Научиться использовать Пролог в Delphi приложениях. 2. Выработать навыки использования Пролога в DELPHI приложениях.
Задание для подготовки к работе
Изучить материал по теме «Компонент LSEngine»
Порядок выполнения работы
1. Решить задачу соответствующего варианта. 2. Подобрать тестовые данные и протестировать программу на компьютере. 3. Составить отчет о проделанной работе.
Содержание отчета
1. Исходные тексты программ на языке Пролог и Object Pascal (Delphi). 2. Наборы тестовых данных и результаты работы программ. 3. Перечень и анализ ошибок. 4. Выводы по работе.
Основные понятия
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 UnifyFloatParm(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 Redo: 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);– установка выводного потока;
Получение версии языка
function GetPVersion: string;– получение версии языка.
Обработка ошибок
procedure ErrMsg(s: PChar);– сообщение об ошибке; function ErrPMsg: string;– сообщение об ошибке; procedure ErrRaise(s: string);– защищенный блок; procedure ErrReadBuf(var i: LongInt; s: PChar);– чтение буфера ошибки.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.) |