Изменить программу под другой метод поиска - Prolog
Формулировка задачи:
Добрый день, помогите пожалуйста изменить на метод Поиска в глубину.
Листинг программы
- %trace
- database
- yes(string)
- no(string)
- maybe(string)
- predicates
- repeat
- run
- animal(string)
- positive(string)
- negative(string)
- xpositive(string)
- xnegative(string)
- ask(string,char)
- remember(string,char)
- delete_all
- clauses
- repeat.
- repeat:-repeat.
- %-----------------------------------------------------------------------------
- % opisyvaem virusy
- animal("Pitch"):-positive("Zarazhaet PC"),
- positive("Rasprostranjaetsja ljudmi"),
- positive ("Osushhestvljaet dostup k FS"),
- negative("Sozdan gruppoj hakerov Back Orifice"),
- positive ("Dannye pol'zovatelja hranjatsja vo vremennom fajle").
- animal("BackOrifice"):- positive("Zarazhaet PC"),
- positive("Rasprostranjaetsja ljudmi"),
- positive ("Osushhestvljaet dostup k FS"),
- positive("Sozdan gruppoj hakerov Back Orifice").
- animal("NetBus"):- positive("Zarazhaet PC"),
- positive("Rasprostranjaetsja ljudmi"),
- positive ("Osushhestvljaet dostup k FS"),
- negative("Sozdan gruppoj hakerov Back Orifice"),
- negative ("Dannye pol'zovatelja hranjatsja vo vremennom fajle").
- animal("Trojan.Winlock"):- positive("Zarazhaet PC"),
- positive("Rasprostranjaetsja ljudmi"),
- negative ("Osushhestvljaet dostup k FS").
- animal("Virus.Win9x.CHI"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- positive("Vnedrjaetsja v sushhestvujushhie fajly").
- animal("WinStart"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
- positive("Ispol'zuet setevye protokoly"),
- positive("Zapisyvaet svoi kopii v arhivy"),
- positive("Raspolagajutsja v kataloge Windows").
- animal("AdjVirus"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
- positive("Ispol'zuet setevye protokoly"),
- positive("Zapisyvaet svoi kopii v arhivy"),
- negative ("Raspolagajutsja v kataloge Windows").
- animal("Worm.info"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
- positive("Ispol'zuet setevye protokoly"),
- negative ("Zapisyvaet svoi kopii v arhivy").
- animal("Conficker"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
- negative ("Ispol'zuet setevye protokoly"),
- positive ("Ispol'zuet ujazvimosti i oshibki administrirovanija").
- animal("VBS.LoveLetter"):- positive("Zarazhaet PC"),
- negative ("Rasprostranjaetsja ljudmi"),
- negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
- negative ("Ispol'zuet setevye protokoly"),
- negative ("Ispol'zuet ujazvimosti i oshibki administrirovanija").
- animal("Trojan.WinCE.Terdial.a"):- negative ("Zarazhaet PC"),
- positive ("Sovershaet zvonki na platnye nomera").
- animal("Worm.SymbOS.Yxe"):- negative ("Zarazhaet PC"),
- negative ("Sovershaet zvonki na platnye nomera "),
- positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
- positive ("Samorasprostranjaetsja po SMS_soobshhenjam").
- animal("Trojan-Spy.SymbOS.Zbot"):- negative ("Zarazhaet PC"),
- negative ("Sovershaet zvonki na platnye nomera "),
- positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
- negative ("Samorasprostranjaetsja po SMS_soobshhenjam"),
- positive ("Peresylaet vhodjashhie soobshhenija").
- animal("Trojan_SMSWinCE.Sejweek"):- negative ("Zarazhaet PC"),
- negative ("Sovershaet zvonki na platnye nomera "),
- positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
- negative ("Samorasprostranjaetsja po SMS_soobshhenjam"),
- negative ("Peresylaet vhodjashhie soobshhenija").
- animal("Trojan_SMS.Android.FakePlayer"):- negative ("Zarazhaet PC"),
- negative ("Sovershaet zvonki na platnye nomera "),
- negative ("Otpravljaet SMS-soobshhenija na platnye nomera"),
- positive ("Prinosit dohod vladel'cam sajtov").
- animal("Net-Worm.IphoneOS.like.b"):- negative ("Zarazhaet PC"),
- negative ("Sovershaet zvonki na platnye nomera "),
- negative ("Otpravljaet SMS-soobshhenija na platnye nomera"),
- negative ("Prinosit dohod vladel'cam sajtov").
- animal("kakoj-to neizvestnyj virus").
- % rabota s dinamicheskoj bazoj dannyh
- positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X,'y').
- negative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X,'n').
- ask(X,R):-write(X," ? : "),readchar(Reply),write(Reply,"\n"),
- remember(X,Reply),R=Reply.
- % proverka prisutstvija fatov v dinamicheskoj baze dannyh
- xpositive(X):-yes(X);maybe(X).
- xnegative(X):-no(X);maybe(X).
- % zapominaem fakt v dinamicheskoj baze dannyh
- remember(X,'y'):-asserta(yes(X)).
- remember(X,'n'):-assertz(no(X)).
- remember(X,'q'):-asserta(maybe(X)).
- % ochishhaem pamjat' ot faktov dinamicheskoj bazy dannyh
- delete_all:-retract(yes(_)),delete_all.
- delete_all:-retract(no(_)),delete_all.
- delete_all:-retract(maybe(_)),delete_all.
- delete_all.
- %-----------------------------------------------------------------------------
- run:-delete_all,
- repeat,
- write("Na voprosy otvechat (y-da, n-net, q-ne znaju).\n"),
- animal(X),
- write("Eto VIRUS : ",X," virus \n"),
- write("Virus opoznan,dlya vyvoda (y/n): "),readchar(Z),
- write(Z),nl,
- Z='y'.
- goal
- write(" Opredelenie Virusov B PC"),nl,
- write("--------------------------------------------"),nl,
- run.
Решение задачи: «Изменить программу под другой метод поиска»
textual
Листинг программы
- domains
- str=string.
- int=integer.
- intlist=integer*.
- predicates
- nondeterm rule(int,str,str,intlist).
- nondeterm complete(int).
- nondeterm recognition(str).
- nondeterm discover(intlist).
- nondeterm ask(int).
- facts
- fact(int,str).
- clauses
- ask(X):-fact(X,"y"),!.
- ask(X):-fact(X,"n"),!,fail.
- ask(1):-write("Заражает компьютер ?"),!,complete(1).
- ask(2):-write("Распространяется людьми?"),!,complete(2).
- ask(3):-write("Совершает звонки на платные номера?"),!,complete(3).
- ask(4):-write("Осуществляет доступ к файловой системе?"),!,complete(4).
- ask(5):-write("Внедряется в существующие файлы?"),!,complete(5).
- ask(6):-write("Отправляет СМС-сообщения на платные номера?"),!,complete(6).
- ask(7):-write("Создан группой хакеров Культ дохлой коровы?"),!,complete(7).
- ask(8):-write("Используют сетевые протоколы?"),!,complete(8).
- ask(9):-write("Самораспространяется по СМС-сообщениям?"),!,complete(9).
- ask(10):-write("Приносит доход владельцам порносайтов?"),!,complete(10).
- ask(11):-write("Данные жертвы хранятся во временной файле?"),!,complete(11).
- ask(12):-write("Записывают свои копии в архивы?"),!,complete(12).
- ask(13):-write("Использует уязвимости и ошибки администрирования?"),!,complete(13).
- ask(14):-write("Пересылает входящие СМС-сообщения?"),!,complete(14).
- ask(15):-write("Располагается в каталоге Windows?"),!,complete(15).
- rule(1,"вирус","BackOrifice",[1,2,4,7]).
- rule(2,"вирус","Pinch",[1,2,4,11]).
- rule(3,"вирус","NetBus",[1,2,4]).
- rule(4,"вирус","Trojan.Winlock",[1,2]).
- rule(5,"вирус","Virus.Win9x.CIH",[1,5]).
- rule(6,"вирус","WinStart",[1,8,12,15]).
- rule(7,"вирус","AdjVirus",[1,8,12]).
- rule(8,"вирус","Worm.Info",[1,8]).
- rule(9,"вирус","Conficker",[1,13]).
- rule(10,"вирус","VBS.LoveLetter",[1]).
- rule(11,"вирус","Trojan.WinCE.Terdial.a",[3]).
- rule(12,"вирус","Worm.SymbOS.Yxe",[6,9]).
- rule(13,"вирус","Trojan_Spy.SymbOS.Zbot",[6,14]).
- rule(14,"вирус","Trojan_SMSWinCE.Sejweek",[6]).
- rule(15,"вирус","Trojan-SMS.Android.FakePlayer",[10]).
- rule(15,"вирус","Net-Worm.IphoneOS.lke.b",[]).
- recognition(X):- rule(N, X, Y, Z), discover(Z), !,
- write(" это более всего похоже на ", X, " - ", Y, " (правило ", N,")"), nl,
- recognition(Y).
- recognition("сеть"):- write("Система не имеет данных, этот вирус системе не известен"),nl,!.
- recognition(_).
- discover([]).
- discover([X|Y]):- ask(X), discover(Y).
- complete(X):- nl, readln(Y), assert(fact(X, Y)), Y="y".
- goal
- retractall(_), recognition("вирус").
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д