Смекни!
smekni.com

Методические рекомендации по срсп и срс самостоятельная работа студентов под руководством преподавателя (стр. 5 из 7)

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: Основные понятия логики. Правильная постановка целей

Цель работы: выработать у обучаемого навыки правильного выделения целей системы, ее декомпозиции и поиска возможных (как можно больше) путей ее достижения.

Содержание работы: цель, дерево целей, декомпозиция целей; факты и правила; прямая и обратная цепочка рассуждений