Get_frame(Frame,Slot,Value)

где: Frame – имя фрейма,.

Slot – имя слота,.

Value – требуемое значение..

Замечание: каждый из аргументов может быть переменной или термом.

Напpимеp, возможен следующий запрос:

?- get_frame(rabbit, X, Y).

Система выдаст все атрибуты фрейма rabbit, и все, наследуемые им от mammal.

add_frame(...), где:

а) аргументы, такие же как и у предиката frame/4,если вводится новый фрейм,

б) если добавляются или изменяются слоты в уже имеющемся фрейме, то первые три аргумента те же, а в последнем – могут стоять параметры только одного слота.

Важное замечание к пункту б):

Следует точно указывать второй и третий аргументы add_frame/4, так как в данном случае фрейм определяется по первым трем аргументам.

Примеры:

· ввод нового фрейма cat.

?- add(cat,[mammal],[],[painting,[],[gray],skin,[],[fluffy_fur]]).

· изменение слота age существующего фрейма gorilla

?- add(gorilla,[monkey],[mammal],[age,[],[4]]).

/****Удаление фрейма ****/

Del_frame(Name, SlotName),

где Name – имя фрейма,.

SlotName – а) имя удаляемого слота, заключенное в скобки: [ ] (удаляется слот).

б) пустой список: [], если удаляется весь фрейм.

Пример:

?- del_frame(rabbit,[]). % удаление фрейма rabbit.

?- del_frame(monkey,[legs]) % удаление слота legs из фрейма monkey.

%Создание базы.

Old:-

assertz(frame(mammal,[],[],[birth,[live],[],skin,[],[fur],

legs,[],[4]])),

assertz(frame(monkey,[mammal],[],[tail,[],[curly],

legs,[2],[]])),

assertz(frame(gorilla,[monkey],[mammal],[character,[],[harm],

age,[8],[]])),

assertz(frame(rabbit,[mammal],[],[ears,[],[long],

moves,[jump],[],tail,[short],[]])).

% new: Удаление из БД предикатов frame/4

New:- abolish(frame/4).

% add_frame: Добавление нового фрейма в БД с проверкой наличия в базе

add_frame(Name,Val,Def,[SlotName|Rest]):-

Not(frame(Name,Val,Def,_)),

assertz(frame(Name,Val,Def,[SlotName|Rest])),!.

% add_frame: Добавление нового слота в фрейм или изменение старого

add_frame(Name,Val,Def,[SlotName|Rest]):-

Frame(Name,Val,Def,Slots),

Ifthen(

Member(SlotName,Slots),

Del_frame(Name,SlotName)

),

Frame(Name,Val,Def,DSlots),

add([SlotName|Rest],DSlots,SLnew),

Retract(frame(Name,_,_,_)),

Assertz(frame(Name,Val,Def,SLnew)).

% del_frame: Удаление фрейма из БД

% a) - Такого фрейма в БД нет

Del_frame(Name, _):-

Not(frame(Name,_,_,_)),

Write('Такого фрейма в системе нет'),

!.

% б) - второй аргумент - [] -пустой список => удаляется весь фрейм

Del_frame(Name, Slot):-

Slot == [],

retract(frame(Name,_,_,_)),!.

% в) - Второй аргумент(имя слота) не пуст => удаляется слот

Del_frame(Name, Slot):-

Frame(Name,Val,Def,SlotList),

del3([Slot,_,_], SlotList, Lnew),

Retract(frame(Name,_,_,_)),

Assert(frame(Name,Val,Def,Lnew)).

% get_frame: Получить значение из фрейма

% a) имя фрейма – переменная

Get_frame(Frame,Slot,Value):-

Retractall(req(_,_,_)),

Var(Frame),

Frame(Frame,_,_,_),

Help_frame(Frame,Slot,Value),

Req(_,Slot,Value).

% б) имя фрейма – терм

Get_frame(Frame,Slot,Value):-


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: