6. логическая модель представления знаний на языке многосортного исчисления предикатов и на языке Пролог
Логическая модель – это описание предметной области на каком-либо логическом языке. Одним из таких логических языков является многосортное исчисление предикатов. При представлении логических моделей на этом языке классы сущностей предметной области интерпретируются, как имена сортов.
Для примера введём следующие имена сортов: Договор, Поставщик, Покупатель, Продукция, Производитель, Количество, Цена, Срок, Тип_Произв, а так же следующие функции и предикаты:
пост:ДоговорПоставщик, покуп:ДоговорПокупатель,
прод:ДоговорПродукция, произв:ДоговорПроизводитель,
кол:ДоговорКоличество, цена: ДоговорЦена, срок:ДоговорСрок
тип_произв: ПроизводительТип_Произв
российский: Тип_Произв, европейский: Тип_Произв
:Количество КоличествоT
:Количество КоличествоT
Выражения 1-4 сотавляют сигнатуру и имеют следующий смысл:
Задаёт несколько функций, например прод (продукция), которые будучи применимы к объекту е сорта Договор, дают например продукцию прод(е), участвующую в операции е.
Задаёт функцию, значениями которой служат типы производителя.
Задаёт константы, принадлежащие сорту Тип_Произв.
Задаёт двухместные предикаты на объектах сорта Количество.
Сигнатура – это множество функций вида f: A1 A2… AnB, где A1, A2,…,An – аргументы, B – значение функции. Множества аргументов и значений функций образуют соответственно сорта A и B. В частном случае, если B=T, причём T={1,0} – особый сорт, то сигнатура имеет вид P: A1 A2… AnT, причём P называют предикатом.
Сигнатура задает структурные связи между понятиями предметной области, представленными предикатами и функциями. Логические связи между этими понятиями задаются формулами, которые записываются в сигнатуре. Структурные и логические связи выражают некоторое знание о предметной области. Таким образом, сигнатура формально представляет одну часть знания о предметной области, а формулы, записанные в этой сигнатуре, представляют другую часть знания.
Графическое представление сигнатуры показано на рис.4, а модельной структуры – на рис.5.
Рис.4. Графическое представление сигнатуры
Логическая модель в Прологе представляется в виде предикатов и баз данных database. Например:
database – договор
дог(Поставщик, Покупатель)
Функцию пост (поставщик) можно реализовать так
пост (N):– дог(Покупатель,Поставщик), N=Поставщик.
Функцию можно представить следующим образом:
(Количество1,Количество2):–Количество1<= Количество2.
7. Организация диалога с пользователем
При загрузке система “Посредник” выводит главное меню, в котором представлены все режимы работы программы. Каждый режим выбирается посредством нажатия цифровой клавиши. Система меню представлена многоуровневой иерархической структурой, т.е. у многих режимов есть свои подменю.
В программе реализованы обычные для такого типа программ режимы просмотра данных, их коррекции и удаления, наряду с обычным имеется интерактивный режим работы.
Если в базы данных были внесены какие-либо изменения, то при выходе из программы система выведет запрос о необходимости сохранения изменений, сопровождаемый звуковым сигналом.
Схема организации диалога представлена на рис.6.
заключение
При написании курсового проекта были использованы разнообразные модели представления знаний, изучаемые инженерией знаний. Система “Посредник” программно реализована на языке Пролог в среде Turbo Prolog 2.0.
Приложение
Текст программы “посредник”
/*==========================================================*/
/* Курсовой проект по дисциплине "Инженерия знаний" */
/* Система "Посредник" */
/* Автор: Данченков А.В., гр. ИИ-1-95 */
/*==========================================================*/
code=8850
domains
Фирма,Товар,Произв,Str=string
Int,N,Парт,Кол_во,Сроки=integer
Цена=real
/* Основные и служебные базы данных */
database - поставщик
поставщик(integer,Фирма,Товар,Произв,Парт,Кол_во,Цена,Сроки)
database - покупатель
покупатель(N,Фирма,Товар,Произв,Парт,Цена,Сроки)
database - sup
sup(Str,Str)
database - contract
contract(integer,integer)
database - best
best(integer,integer,integer,integer)
database - best2
best2(integer,integer,integer,integer)
database - flag
flag(Int)
predicates
start
view(Int)
autoload
working(Int)
main_menu
correct(Int)
interact(integer)
warning(integer)
form_best(integer,integer,integer,integer)
form_best2(integer)
f_b2(integer,integer,integer,integer)
fb1(integer,integer,integer,integer)
fb2(integer,integer,integer,integer)
del(Int)
del_sup(string)
ins_sup(string)
view_sup(string)
sve
save_bd
ask
error
io_error
ok
repeat
checkcontr(integer)
all_contract
print_contract
cmp_name(string,string)
find_web(Str,Str)
prn(integer,string)
goal
start.
clauses
/* Основная процедура */
start:-
makewindow(1,26,94,"СИСТЕМА ПОСРЕДНИК",0,0,25,80),
clearwindow,
autoload,
main_menu.
/* Процедура автоматической загрузки баз данных */
autoload:-
retractall(_,поставщик),
existfile("kurs1.dat"),
consult("kurs1.dat",поставщик),
retractall(_,покупатель),
existfile("kurs2.dat"),
consult("kurs2.dat",покупатель),
retractall(_,sup),
existfile("web.dat"),
consult("web.dat",sup),
cursor(21,30),
write("*Базы загружены*").
autoload:-
makewindow(2,74,79,"ОШИБКА",6,18,8,40),
cursor(2,10),
write("Нет базы на диске"),
sound(70,294),
removewindow,
!.
/* Главное меню */
main_menu:-
repeat,
cursor(7,0),
write(" 0 - О системе... "),nl,
write(" 1 - Корректировка данных"),nl,
write(" 2 - Уничтожение записей"),nl,
write(" 3 - Просмотр баз данных"),nl,
write(" 4 - Заключение договоров"),nl,
write(" 5 - Интерактивный режим"),nl,
write(" 6 - Выход из программы"),nl,
write(" =>"),
readint(C),
clearwindow,
working(C),
clearwindow,
C = 6,
retractall(_),
removewindow.
/* Вывод данных о создателе программы */
working(0):-
makewindow(3,27,30,"О системе...",0,0,25,80),
nl,nl,
write(" Инфоpмационно-спpавочная система"),
nl,nl,
write(" Посредник "),
nl,nl,nl,nl,
write(" Программа составлена в среде "),
nl,
write(" TURBO-PROLOG v.2.0."),
nl,nl,nl,
write(" автоp: Данченков А.В."),
nl,nl,
write(" МИРЭА, гp.ИИ-1-95 (С) 1997 г. "),
nl,
sound(5,220),
cursor(22,26),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow,!.
/*Процедура вывода меню корректировки данных*/
working(1):-
makewindow(4,26,48,"Коppектировка данных",0,0,25,80),
sound(5,220),
repeat,
nl,
nl,
cursor(9,0),
write(" 1 - Изменение данных по поставщикам"),nl,
write(" 2 - Изменение данных по покупателям"),nl,
write(" 3 - Добавление данных по поставщикам"),nl,
write(" 4 - Добавление данных по покупателям"),nl,
write(" 5 - Выход в главное меню" ),nl,
write(" =>"),
readint(X),
clearwindow,
X>0,X<=5,
correct(X),
clearwindow,
X=5,!,
removewindow.
/* Процедура вывода меню уничтожения данных*/
working(2):-
makewindow(5,48,107,"Уничтожение записей",0,0,25,80),
sound(5,220),
repeat,
cursor(7,0),
write(" 1 - Удаление из базы данных поставщиков"),nl,
write(" 2 - Удаление из базы данных покупателей"),nl,
write(" 3 - Удаление из классифицирующей сети"),nl,
write(" 4 - Выход"),nl,
write(" => "),
readint(I),
clearwindow,
I>0,I<=4,
del(I),
clearwindow,
I=4,!,
removewindow.
/* Процедура вывода меню просмотра базы данных */
working(3):-
makewindow(6,30,26,"Просмотp баз данных",0,0,25,80),
sound(5,220),
repeat,
nl,
nl,
cursor(7,0),
write(" 1 - Просмотр базы данных по поставщикам"),nl,
write(" 2 - Просмотр базы данных по покупателям"),nl,
write(" 3 - Просмотр связей в классифицирующей сети"),nl,
write(" 4 - Выход в главное меню" ),nl,
write(" =>"),
readint(X),
clearwindow,
X>0,X<=4,
view(X),
clearwindow,
X=4,!,
removewindow.
/* Вызов процедуры, выводящей контракты */
working(4):- retractall(_,best),
retractall(_,best2),
all_contract,!.
/* Процедура вывода меню интерактивного режима */
working(5):-
makewindow(4,26,48,"Заключение договоров в интерактивном режиме",0,0,25,80),
sound(5,220),
repeat,
nl,
nl,
cursor(9,0),
write(" 1 - Поиск поставщика"),nl,
write(" 2 - Поиск покупателя"),nl,
write(" 3 - Выход"),nl,
write(" =>"),
readint(X),
clearwindow,
X>0,X<=3,
interact(X),
clearwindow,
X=3,!,
removewindow.
/* Процедура выхода из программы */
working(6):-flag(1),retract(flag(1)),save_bd,!.
working(6).
working(_):-
makewindow(16,74,79,"ОШИБКА ВВОДА",6,18,8,40),
nl,
write(" Введите число от 0 до 6,"),nl,
write(" соответствующее выбранному пункту"),nl,nl,nl,
write(" Нажмите на любую клавишу"),
sound(20,494),
sound(30,392),
readchar(_),
removewindow.
/* Процедуры просмотра баз данных */
view(1):-
makewindow(16,31,26,"Просмотp базы данных по поставщикам",0,0,25,80),
write("|=================================================================|"),nl,
write("| ПОСТАВЩИКИ |"),nl,
write("|=================================================================|"),nl,
write("| | | | | Мин . | | | |"),nl,
write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl,
write("|=================================================================|"),nl,
поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok),
cursor(Z,_),
cursor(Z,1),write(N),
cursor(Z,3),write("¦",Firm),
cursor(Z,16),write("¦",Tov),
cursor(Z,36),write("¦",Proizv),
cursor(Z,50),write("¦",Min),
cursor(Z,59),write("¦",Kol),
cursor(Z,68),write("¦",Price),
cursor(Z,73),write("¦",Srok),
cursor(Z,0),write("¦"),
cursor(Z,76),write("¦"),
nl,
fail.
view(1):-
write("|==================================================================|"),
nl,
cursor(22,26),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
view(2):-
makewindow(16,31,26,"Просмотp базы данных по покупателям",0,0,25,80),
write("|=================================================================|"),nl,
write("| ПОКУПАТЕЛИ |"),nl,
write("|=================================================================|"),nl,
write("| | | | | Требуемая | | |"),nl,
write("|No| Фирма | Товар |Производитель| партия |Цена |Д|"),nl,
write("|=================================================================|"),nl,
покупатель(N,Firm,Tov,Proizv,Part,Price,Srok),
cursor(Z,_),
cursor(Z,1),write(N),
cursor(Z,4),write("¦",Firm),
cursor(Z,20),write("¦",Tov),
cursor(Z,42),write("¦",Proizv),
cursor(Z,57),write("¦",Part),
cursor(Z,67),write("¦",Price),
cursor(Z,72),write("¦",Srok),
cursor(Z,0),write("¦"),
cursor(Z,76),write("¦"),
nl,
fail.
view(2):-
write("|==================================================================|"),
nl,
cursor(22,26),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow.
view(3):-
makewindow(16,31,26,"Просмотp связей в классифицирующей сети",0,0,25,80),
nl,nl,
view_sup("производитель"),
cursor(21,26),
write(" Просмотр закончен "),nl,
cursor(22,26),
write("Нажмите на любую клавишу"),
readchar(_),
removewindow,!.
view(_).
/* Процедуры коррекции данных в базах данных */
correct(1):-
makewindow(4,26,48,"Изменение данных о поставщках",0,0,25,80),
nl,
write(" Введите порядковый номер поставщика : "),readint(X),nl,
поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok),
clearwindow,nl,
write(" Порядковый номер поставщика : "),write(X),nl,
write(" Фирма : "),write(Firm),nl,
write(" Товар : "),write(Tov),nl,
write(" Производитель : "),write(Proizv),nl,
write(" Минимальная партия : "),write(Min),nl,
write(" Колличество на складе : "),write(Kol),nl,
write(" Цена за единицу товара : "),write(Price),nl,
write(" Сроки поставки : "),write(Srok),nl,
nl,nl,nl,
write(" Введите название фирмы : "),readln(Firm1),
write(" Введите название товара : "),readln(Tov1),
write(" Введите производителя : "),readln(Proizv1),
write(" Введите минимальную партию : "),readInt(Min1),
write(" Введите колличество на складе : "),readInt(Kol1),
write(" Введите цену за единицу товара : "),readreal(Price1),
write(" Введите сроки поставки : "),readInt(Srok1),nl,
X1=X,
retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
assertz(поставщик(X1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1)),
!,
ins_sup(Proizv1),
assert(flag(1)),
removewindow.
correct(2):-
makewindow(4,26,48,"Изменение данных о покупателях",0,0,25,80),
nl,
write(" Введите порядковый номер покупателя : "),readint(X),nl,
покупатель(X,Firm,Tov,Proizv,Part,Price,Srok),
clearwindow,nl,
write(" Порядковый номер покупателя : "),write(X),nl,
write(" Фирма : "),write(Firm),nl,
write(" Товар : "),write(Tov),nl,
write(" Производитель : "),write(Proizv),nl,
write(" Необходимая партия : "),write(Part),nl,
write(" Цена за единицу товара : "),write(Price),nl,
write(" Сроки поставки : "),write(Srok),nl,
nl,nl,nl,
write(" Введите название фирмы : "),readln(Firm1),
write(" Введите название товара : "),readln(Tov1),
write(" Введите производителя : "),readln(Proizv1),
write(" Введите необходимую партию : "),readInt(Part1),
write(" Введите цену за единицу товара : "),readreal(Price1),
write(" Введите сроки поставки : "),readInt(Srok1),nl,
X1=X,
retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)),
assertz(покупатель(X1,Firm1,Tov1,Proizv1,Part1,Price1,Srok1)),
ins_sup(Proizv1),
!,
assert(flag(1)),
removewindow.
correct(3):-
makewindow(9,26,48,"Добавление данных о поставщиках",0,0,25,80),
repeat,
nl,
write(" Введите порядковый номер поставщика : "),readint(K),nl,
write(" Введите название фирмы : "),readln(F),
write(" Введите название товара : "),readln(T),
write(" Введите производителя : "),readln(P),
write(" Введите минимальную партию : "),readInt(M),
write(" Введите колличество на складе : "),readInt(Kl),
write(" Введите цену за единицу товара : "),readreal(Pr),
write(" Введите сроки поставки : "),readInt(S),nl,
N1=K,
Firm=F,Tov=T,Proizv=P,
Min=M,Kol=Kl,
Price=Pr,Srok=S,
assertz(поставщик(N1,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
ins_sup(Proizv),
ask,!,
assert(flag(1)),
removewindow.
correct(4):-
makewindow(9,26,48,"Добавление данных о покупателях",0,0,25,80),
repeat,
nl,
write(" Введите порядковый номер покупателя : "),readint(K),nl,
write(" Введите название фирмы : "),readln(F),
write(" Введите название товара : "),readln(T),
write(" Введите производителя : "),readln(P),
write(" Введите необходимую партию : "),readInt(M),
write(" Введите цену за единицу товара : "),readreal(Pr),
write(" Введите сроки поставки : "),readInt(S),nl,
N1=K,
Firm=F,Tov=T,Proizv=P,
Part=M,
Price=Pr,Srok=S,
assertz(покупатель(N1,Firm,Tov,Proizv,Part,Price,Srok)),
ins_sup(Proizv),
ask,!,
assert(flag(1)),
removewindow.
correct(_).
/* Вспомагательные процедуры удаления данных */
del(1):-
makewindow(5,48,107,"Удаление данных о поставщках",0,0,25,80),
nl,
write(" Введите порядковый номер поставщика : "),readint(X),nl,
поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok),
retract(поставщик(X,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
assert(flag(1)),
ok,
!,
removewindow.
del(1):-
error,
removewindow,!.
del(2):-
makewindow(5,48,107,"Удаление данных о покупателях",0,0,25,80),
nl,
write(" Введите порядковый номер покупателя : "),readint(X),nl,
покупатель(X,Firm,Tov,Proizv,Part,Price,Srok),
retract(покупатель(X,Firm,Tov,Proizv,Part,Price,Srok)),
assert(flag(1)),
ok,
!,
removewindow.
del(2):-
error,
removewindow,!.
del(3):- makewindow(5,48,107,"Удаление из классифицирующей сети",0,0,25,80),
nl,
write(" Введите удаляемого производителя/регеон : "),readln(S),nl,
del_sup(S),
assert(flag(1)),
ok,
!,
removewindow.
del(3):-
error,
removewindow,!.
del(_).
/* Процедура запроса на окончание ввода в correct(3) и correct(3) */
ask:-
makewindow(10,43,120,"Вопрос",6,18,8,40),nl,nl,
write(" Продолжить процесс ввода данных? "),nl,nl,
write(" [Д]а/[Н]ет"),
readchar(Ch),
removewindow,
clearwindow,
Ch='Н',!.
/* Вывод запроса о сохранении изменённых баз данных */
save_bd:-
makewindow(17,74,79,"Сохранение изменений",6,18,8,40),nl,
write(" Сохранить произведённые "),nl,
write(" изменения на диске?"),nl,nl,
write(" [Д]а/[Н]ет"),
sound(20,494),
sound(30,392),
readchar(Ch),
removewindow,
clearwindow,
Ch='Д',!,sve.
save_bd.
/* Сохранение данных на диске */
sve:-save("kurs1.dat",поставщик),
save("kurs2.dat",покупатель),
save("web.dat",sup),!.
sve:-io_error,removewindow.
/* Процедуры вывода сообщений об ошибках */
error:-
makewindow(15,74,79,"ОШИБКА",6,18,8,40),
cursor(2,16),
write("ОШИБКА"),nl,nl,
write(" Нажмите на любую клавишу"),
sound(70,294),
readchar(_),
removewindow,
!.
io_error:-
makewindow(16,74,79,"ОШИБКА",6,18,8,40),
cursor(2,7),
write("Ошибка ввода/вывода"),nl,nl,
write(" Нажмите на любую клавишу"),
sound(70,294),
readchar(_),
removewindow.
/* Процедура вывода сообщения об успешном завершении данной операции */
ok:-
makewindow(17,27,90,"ОК",6,18,8,40),
cursor(2,7),
write(" ОПЕРАЦИЯ ВЫПОЛНЕНА"),nl,nl,
write(" Нажмите на любую клавишу"),
readchar(_),
removewindow.
/* Процедура repeat */
repeat.
repeat:- repeat.
/* Процедура обнаружения связей по классифицирующей сети */
cmp_name(Proizv,Proizv).
cmp_name(Proizv,Proizv1):-
find_web(Proizv,Proizv1).
find_web(X,Y):-sup(X,Y).
find_web(X,Y):-sup(X,Z),find_web(Z,Y).
/* Процедура обнаружения всех возможных контрактов */
all_contract:-
покупатель(N,_,Tov,Proizv,Part,Price,Srok),
поставщик(N1,_,Tov,Proizv1,Min1,Kol1,Price1,Srok1),
cmp_name(Proizv,Proizv1),
Part>=Min1,Part<=Kol1,Price>=Price1,Srok>=Srok1,
assertz(contract(N,N1)),
assert(best(N,0,0,0)),
assert(best2(N,0,0,1000)),
fail.
all_contract:-print_contract.
/* Процедуры вывода на экран всех возможных контрактов */
print_contract:-
makewindow(16,31,26,"Все возможные контракты",0,0,25,80),
nl,nl,
покупатель(N,Firm,_,_,_,_,_),
checkcontr(N),
prn(N,Firm),
fail.
print_contract:-
retractall(_,contract),
removewindow.
prn(N,Firm):-
cursor(1,1),
write("Для фирмы: ",Firm),
nl,
write("|=================================================================|"),nl,
write("| | | | | Мин . | | | |"),nl,
write("|No| Фирма | Товар |Производитель| партия | Кол-во |Цена|Д|"),nl,
write("|=================================================================|"),nl,
contract(N,N1),
поставщик(N1,Firm1,Tov1,Proizv1,Min1,Kol1,Price1,Srok1),
cursor(Z,_),
cursor(Z,1),write(N1),
cursor(Z,3),write("¦",Firm1),
cursor(Z,16),write("¦",Tov1),
cursor(Z,36),write("¦",Proizv1),
cursor(Z,50),write("¦",Min1),
cursor(Z,59),write("¦",Kol1),
cursor(Z,68),write("¦",Price1),
cursor(Z,73),write("¦",Srok1),
cursor(Z,0),write("¦"),
cursor(Z,76),write("¦"),
nl,
покупатель(N,_,_,_,Part,_,_),
retract(contract(N,N1)),
Cs=Part*Price1,
form_best(N,N1,Cs,Srok1),
form_best2(N),
fail.
prn(N,_):-
write("|===================================================================|"),
nl,
best2(N,Np,_,_),
поставщик(Np,Firm,_,_,_,_,_,_),nl,
write("Наиболее предпочтительный"),nl,
write("контракт с фирмой: ",Firm),nl,
cursor(22,26),
write("Нажмите на любую клавишу"),
readchar(_),
clearwindow,!.
/* Проверяет, есть ли контракты */
checkcontr(N):-contract(N,_).
/* Процедура формирования наиболее предпочтительного контракта */
form_best(N,Np,S,Srok):- Na=N,
best(Na,Np1,S1,Srok1),S=S1,
assertz(best(Na,Np,S,Srok)),!.
form_best(N,Np,S,Srok):- Na=N,
best(Na,Np1,S1,Srok1),S>S1,fb1(Na,Np,S,Srok),
assertz(best(Na,Np,S,Srok)),!.
form_best(_,_,_,_).
fb1(N,_,_,_):-
retract(best(N,_,_,_)),fail.
fb1(_,_,_,_).
form_best2(N):-
best(N,Np,S,Srok),f_b2(N,Np,S,Srok),fail.
form_best2(_).
f_b2(N,Np,S,Srok):- Na=N,
best2(Na,Np1,_,Srok1),Srok1>Srok,
fb2(Na,Np,S,Srok),
assertz(best2(Na,Np,S,Srok)),!.
f_b2(_,_,_,_).
fb2(N,_,_,_):- retract(best2(N,_,_,_)),fail.
fb2(_,_,_,_).
/* Процедуры заключения договоров в интерактивном режиме */
interact(1):-
makewindow(9,26,48,"Поиск поставщика",0,0,25,80),
nl,
write(" Введите название фирмы : "),readln(F),
write(" Введите название товара : "),readln(T),
write(" Введите производителя : "),readln(P),
write(" Введите необходимую партию : "),readInt(M),
write(" Введите цену за единицу товара : "),readreal(Pr),
write(" Введите сроки поставки : "),readInt(S),nl,
N=0,
Firm=F,Tov=T,Proizv=P,
Part=M,
Price=Pr,Srok=S,
assertz(покупатель(N,Firm,Tov,Proizv,Part,Price,Srok)),
removewindow,
поставщик(N1,_,Tov,Proizv1,Min1,Kol1,Price1,Srok1),
cmp_name(Proizv,Proizv1),
Part>=Min1,Part<=Kol1,Price>=Price1,Srok>=Srok1,
assert(flag(2)),
assertz(contract(N,N1)),
assert(best(N,0,0,0)),
fail.
interact(1):-flag(2),print_contract,
retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),
retract(flag(2)),!.
interact(1):-
warning(N),
покупатель(0,Firm,Tov,Proizv,Part,Price,Srok),
assertz(покупатель(N,Firm,Tov,Proizv,Part,Price,Srok)),
ins_sup(Proizv),
retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),
assert(flag(1)),
!.
interact(1):- retract(покупатель(0,Firm,Tov,Proizv,Part,Price,Srok)),!.
interact(2):-
makewindow(9,26,48,"Поиск покупателя",0,0,25,80),
nl,
write(" Введите название фирмы : "),readln(F),
write(" Введите название товара : "),readln(T),
write(" Введите производителя : "),readln(P),
write(" Введите минимальную партию : "),readInt(M),
write(" Введите имеющуюся партию : "),readInt(I),
write(" Введите цену за единицу товара : "),readreal(Pr),
write(" Введите сроки поставки : "),readInt(S),nl,
N=0,
Firm=F,Tov=T,Proizv=P,Min=M,
Kol=I,
Price=Pr,Srok=S,
assertz(поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
removewindow,
покупатель(N1,_,Tov,Proizv1,Part1,Price1,Srok1),
cmp_name(Proizv1,Proizv),
Part1>=Min,Part1<=Kol,Price1>=Price,Srok1>=Srok,
assert(flag(2)),
assertz(contract(N1,N)),
assert(best(N1,0,0,0)),
fail.
interact(2):-flag(2),print_contract,
retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
retract(flag(2)),!.
interact(2):-
warning(N),
поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok),
assertz(поставщик(N,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
ins_sup(Proizv),
retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),
assert(flag(1)),
!.
interact(2):- retract(поставщик(0,Firm,Tov,Proizv,Min,Kol,Price,Srok)),!.
interact(_).
/* Вывод предупреждения о невозможности заключения договора */
warning(N):-makewindow(7,49,113,"Предупреждение",5,10,12,60),
sound(5,220),nl,nl,
write(" На данный момент заключение контракта невозможно"),nl,
write(" Поместить данные в базу данных"),nl,
write(" для последующей обработки?"),nl,nl,
write(" [Д]а/[Н]ет"),nl,
readchar(Ch),
removewindow,
Ch='Д',
write(" Введите порядковый номер фирмы : "),readInt(N),nl,
!.
/* Удаление элемента из классифицирующей сети */
% В середине цепочки
del_sup(S):- sup(S,X), del_sup(X),fail.
% В конце цепочки
del_sup(S):- sup(_,S), retract(sup(_,S)),fail.
del_sup(_).
/* Определение необходимости добавления и добавление */
/* элемента в классифицирующую сеть */
ins_sup(S):-sup(_,S),!.
ins_sup(S):-sup("производитель",S),!.
ins_sup(S):-
write("Введите региональную принадлежность объекта _ ",S,"_ :"),
readln(M),nl,
assertz(sup(M,S)),assert(flag(1)),ins_sup(M),!.
/* Вывод на печать связей в классифицирующей сети */
view_sup(S):-
sup(S,M),write(S," -> ",M),write("; "),
view_sup(M),nl,fail.
view_sup(_):- readchar(_).
... рынка по новому товару; рекламное мероприятие; получение юридической консультации. Расчеты вознаграждения по системе “стоимость + премия”. В расчетах за выполнение отдельных поручений поставщика. Посредник предоставляет документы, подтверждающие расходы, а поставщик оплачивает их и выплачивает премию, рассчитанную оговоренным методом (обычно в процентах к расходам). Выплата дополнительного ...
... коммуникаторами) мероприятий продвижения продаж могут выступать фирмы-производители товаров и торговые посредники (как оптовые, так и розничные). Цели, достигаемые приемами стимулирования сбыта, определяются маркетинговыми задачами фирмы и характеристиками целевой аудитории, на которую они направлены. Обычно выделяют три типа адресатов сейлз промоушн. 1) потребители; 2) торговые посредники; ...
... помогает: ослабить препятствия, мешающие эффективной коммуникации между участниками; максимизировать возможность исследования альтернатив, учесть интересы всех вовлеченных в процесс сторон; создать модель для разрешения конфликта в будущем. Медиация, которая может быть как судебной, так и договорной отличается от: Арбитража - средства разрешения конфликта между сторонами 3-м лицом на основе ...
... и эффективности. Если появится возможность более результативно выполнять функции, будут произведены соответствующие изменения. 1.2 Классификация оптовых и розничных посредников Существует огромное количество разнообразных посредников. Различают: торговых посредников, фирмы, осуществляющие товародвижение; агентства маркетинговых услуг и финансовых посредников. Под финансовыми посредниками в ...
0 комментариев