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);– чтение буфера ошибки.
Ниже приведён текст модуля, производящего запросы к базе данных.
unit lab6Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Amzi, StdCtrls, Buttons;
type
TForm1 = class(TForm)
LSEngine: TLSEngine;
OutPut: TListBox;
GroupBox1: TGroupBox;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
t: TTerm;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
try
LSEngine.InitLS('lab6');
LSEngine.LoadXPL('lab6');
LSEngine.Main;
except
showmessage('База не загружена');
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
LSEngine.CloseLS;
except
showmessage('База не закрыта');
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
tf:boolean;
begin
Output.items.Clear;
tf := LSEngine.CallPStr(t, ComboBox1.Text);
while tf do
begin
if LSEngine.GetArity(t)=1 then Output.items.add(LSEngine.GetPStrArg(t, 1)+' is '+LSEngine.GetFunctor(t))
else Output.items.add(LSEngine.GetPStrArg(t, 1)+' is '+LSEngine.GetFunctor(t)+' of '+LSEngine.GetPStrArg(t, 2));
tf := LSEngine.Redo;
end;
end;
end.
1. Составить программу, которая отображает все данные лабораторной работы № 1 на форме DELPHI приложения.
2. Подобрать тестовые данные, проверяющие работу программы.
3. Провести анализ ошибок и полученных результатов, составить отчет о проделанной работе.
1. Исходные тексты программ на языке Пролог и Object Pascal (Delphi).
2. Наборы тестовых данных и результаты работы программ.
3. Перечень и анализ ошибок.
4. Выводы по работе.
МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ
САМОСТОЯТЕЛЬНОЙ РАБОТЫ СТУДЕНТОВ
СОДЕРЖАНИЕ
Тема 1: Основные понятия логики. Правильная постановка целей
Тема 2: Элементы формальной логики для управления техническими устройствами
Тема 3: Программирование на языке Prolog. Синтаксис и Рекурсия на Prolog
Тема 4: Построение семантической сети на основе фрагмента текста
Тема 5: Создание фрейма - визуального образа
Тема 6: Создание не визуального фрейма
Тема 1: Основные понятия логики. Правильная постановка целей
Цель работы: выработать у обучаемого навыки правильного выделения целей системы, ее декомпозиции и поиска возможных (как можно больше) путей ее достижения.
Содержание работы: цель, дерево целей, декомпозиция целей; факты и правила; прямая и обратная цепочка рассуждений