Изменить программу под другой метод поиска - Prolog

Узнай цену своей работы

Формулировка задачи:

Добрый день, помогите пожалуйста изменить на метод Поиска в глубину.
Листинг программы
  1. %trace
  2. database
  3. yes(string)
  4. no(string)
  5. maybe(string)
  6. predicates
  7. repeat
  8. run
  9. animal(string)
  10. positive(string)
  11. negative(string)
  12. xpositive(string)
  13. xnegative(string)
  14. ask(string,char)
  15. remember(string,char)
  16. delete_all
  17. clauses
  18. repeat.
  19. repeat:-repeat.
  20. %-----------------------------------------------------------------------------
  21. % opisyvaem virusy
  22. animal("Pitch"):-positive("Zarazhaet PC"),
  23. positive("Rasprostranjaetsja ljudmi"),
  24. positive ("Osushhestvljaet dostup k FS"),
  25. negative("Sozdan gruppoj hakerov Back Orifice"),
  26. positive ("Dannye pol'zovatelja hranjatsja vo vremennom fajle").
  27.  
  28. animal("BackOrifice"):- positive("Zarazhaet PC"),
  29. positive("Rasprostranjaetsja ljudmi"),
  30. positive ("Osushhestvljaet dostup k FS"),
  31. positive("Sozdan gruppoj hakerov Back Orifice").
  32.  
  33. animal("NetBus"):- positive("Zarazhaet PC"),
  34. positive("Rasprostranjaetsja ljudmi"),
  35. positive ("Osushhestvljaet dostup k FS"),
  36. negative("Sozdan gruppoj hakerov Back Orifice"),
  37. negative ("Dannye pol'zovatelja hranjatsja vo vremennom fajle").
  38. animal("Trojan.Winlock"):- positive("Zarazhaet PC"),
  39. positive("Rasprostranjaetsja ljudmi"),
  40. negative ("Osushhestvljaet dostup k FS").
  41. animal("Virus.Win9x.CHI"):- positive("Zarazhaet PC"),
  42. negative ("Rasprostranjaetsja ljudmi"),
  43. positive("Vnedrjaetsja v sushhestvujushhie fajly").
  44.  
  45. animal("WinStart"):- positive("Zarazhaet PC"),
  46. negative ("Rasprostranjaetsja ljudmi"),
  47. negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
  48. positive("Ispol'zuet setevye protokoly"),
  49. positive("Zapisyvaet svoi kopii v arhivy"),
  50. positive("Raspolagajutsja v kataloge Windows").
  51. animal("AdjVirus"):- positive("Zarazhaet PC"),
  52. negative ("Rasprostranjaetsja ljudmi"),
  53. negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
  54. positive("Ispol'zuet setevye protokoly"),
  55. positive("Zapisyvaet svoi kopii v arhivy"),
  56. negative ("Raspolagajutsja v kataloge Windows").
  57. animal("Worm.info"):- positive("Zarazhaet PC"),
  58. negative ("Rasprostranjaetsja ljudmi"),
  59. negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
  60. positive("Ispol'zuet setevye protokoly"),
  61. negative ("Zapisyvaet svoi kopii v arhivy").
  62. animal("Conficker"):- positive("Zarazhaet PC"),
  63. negative ("Rasprostranjaetsja ljudmi"),
  64. negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
  65. negative ("Ispol'zuet setevye protokoly"),
  66. positive ("Ispol'zuet ujazvimosti i oshibki administrirovanija").
  67. animal("VBS.LoveLetter"):- positive("Zarazhaet PC"),
  68. negative ("Rasprostranjaetsja ljudmi"),
  69. negative ("Vnedrjaetsja v sushhestvujushhie fajly"),
  70. negative ("Ispol'zuet setevye protokoly"),
  71. negative ("Ispol'zuet ujazvimosti i oshibki administrirovanija").
  72. animal("Trojan.WinCE.Terdial.a"):- negative ("Zarazhaet PC"),
  73. positive ("Sovershaet zvonki na platnye nomera").
  74. animal("Worm.SymbOS.Yxe"):- negative ("Zarazhaet PC"),
  75. negative ("Sovershaet zvonki na platnye nomera "),
  76. positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
  77. positive ("Samorasprostranjaetsja po SMS_soobshhenjam").
  78. animal("Trojan-Spy.SymbOS.Zbot"):- negative ("Zarazhaet PC"),
  79. negative ("Sovershaet zvonki na platnye nomera "),
  80. positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
  81. negative ("Samorasprostranjaetsja po SMS_soobshhenjam"),
  82. positive ("Peresylaet vhodjashhie soobshhenija").
  83. animal("Trojan_SMSWinCE.Sejweek"):- negative ("Zarazhaet PC"),
  84. negative ("Sovershaet zvonki na platnye nomera "),
  85. positive ("Otpravljaet SMS-soobshhenija na platnye nomera"),
  86. negative ("Samorasprostranjaetsja po SMS_soobshhenjam"),
  87. negative ("Peresylaet vhodjashhie soobshhenija").
  88. animal("Trojan_SMS.Android.FakePlayer"):- negative ("Zarazhaet PC"),
  89. negative ("Sovershaet zvonki na platnye nomera "),
  90. negative ("Otpravljaet SMS-soobshhenija na platnye nomera"),
  91. positive ("Prinosit dohod vladel'cam sajtov").
  92. animal("Net-Worm.IphoneOS.like.b"):- negative ("Zarazhaet PC"),
  93. negative ("Sovershaet zvonki na platnye nomera "),
  94. negative ("Otpravljaet SMS-soobshhenija na platnye nomera"),
  95. negative ("Prinosit dohod vladel'cam sajtov").
  96.  
  97. animal("kakoj-to neizvestnyj virus").
  98.  
  99. % rabota s dinamicheskoj bazoj dannyh
  100. positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X,'y').
  101. negative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X,'n').
  102. ask(X,R):-write(X," ? : "),readchar(Reply),write(Reply,"\n"),
  103. remember(X,Reply),R=Reply.
  104. % proverka prisutstvija fatov v dinamicheskoj baze dannyh
  105. xpositive(X):-yes(X);maybe(X).
  106. xnegative(X):-no(X);maybe(X).
  107. % zapominaem fakt v dinamicheskoj baze dannyh
  108. remember(X,'y'):-asserta(yes(X)).
  109. remember(X,'n'):-assertz(no(X)).
  110. remember(X,'q'):-asserta(maybe(X)).
  111. % ochishhaem pamjat' ot faktov dinamicheskoj bazy dannyh
  112. delete_all:-retract(yes(_)),delete_all.
  113. delete_all:-retract(no(_)),delete_all.
  114. delete_all:-retract(maybe(_)),delete_all.
  115. delete_all.
  116. %-----------------------------------------------------------------------------
  117. run:-delete_all,
  118. repeat,
  119. write("Na voprosy otvechat (y-da, n-net, q-ne znaju).\n"),
  120. animal(X),
  121. write("Eto VIRUS : ",X," virus \n"),
  122. write("Virus opoznan,dlya vyvoda (y/n): "),readchar(Z),
  123. write(Z),nl,
  124. Z='y'.
  125. goal
  126. write(" Opredelenie Virusov B PC"),nl,
  127. write("--------------------------------------------"),nl,
  128. run.

Решение задачи: «Изменить программу под другой метод поиска»

textual
Листинг программы
  1. domains
  2. str=string.
  3. int=integer.
  4. intlist=integer*.
  5. predicates
  6. nondeterm rule(int,str,str,intlist).
  7. nondeterm complete(int).
  8. nondeterm recognition(str).
  9. nondeterm discover(intlist).
  10. nondeterm ask(int).
  11. facts
  12. fact(int,str).
  13. clauses
  14.  
  15.  
  16.  
  17. ask(X):-fact(X,"y"),!.
  18. ask(X):-fact(X,"n"),!,fail.
  19.  
  20. ask(1):-write("Заражает компьютер ?"),!,complete(1).
  21. ask(2):-write("Распространяется людьми?"),!,complete(2).
  22. ask(3):-write("Совершает звонки на платные номера?"),!,complete(3).
  23. ask(4):-write("Осуществляет доступ к файловой системе?"),!,complete(4).
  24. ask(5):-write("Внедряется в существующие файлы?"),!,complete(5).
  25. ask(6):-write("Отправляет СМС-сообщения на платные номера?"),!,complete(6).
  26. ask(7):-write("Создан группой хакеров Культ дохлой коровы?"),!,complete(7).
  27. ask(8):-write("Используют сетевые протоколы?"),!,complete(8).
  28. ask(9):-write("Самораспространяется по СМС-сообщениям?"),!,complete(9).
  29. ask(10):-write("Приносит доход владельцам порносайтов?"),!,complete(10).
  30. ask(11):-write("Данные жертвы хранятся во временной файле?"),!,complete(11).
  31. ask(12):-write("Записывают свои копии в архивы?"),!,complete(12).
  32. ask(13):-write("Использует уязвимости и ошибки администрирования?"),!,complete(13).
  33. ask(14):-write("Пересылает входящие СМС-сообщения?"),!,complete(14).
  34. ask(15):-write("Располагается в каталоге Windows?"),!,complete(15).
  35.  
  36. rule(1,"вирус","BackOrifice",[1,2,4,7]).
  37. rule(2,"вирус","Pinch",[1,2,4,11]).
  38. rule(3,"вирус","NetBus",[1,2,4]).
  39. rule(4,"вирус","Trojan.Winlock",[1,2]).
  40. rule(5,"вирус","Virus.Win9x.CIH",[1,5]).
  41. rule(6,"вирус","WinStart",[1,8,12,15]).
  42. rule(7,"вирус","AdjVirus",[1,8,12]).
  43. rule(8,"вирус","Worm.Info",[1,8]).
  44. rule(9,"вирус","Conficker",[1,13]).
  45. rule(10,"вирус","VBS.LoveLetter",[1]).
  46. rule(11,"вирус","Trojan.WinCE.Terdial.a",[3]).
  47. rule(12,"вирус","Worm.SymbOS.Yxe",[6,9]).
  48. rule(13,"вирус","Trojan_Spy.SymbOS.Zbot",[6,14]).
  49. rule(14,"вирус","Trojan_SMSWinCE.Sejweek",[6]).
  50. rule(15,"вирус","Trojan-SMS.Android.FakePlayer",[10]).
  51. rule(15,"вирус","Net-Worm.IphoneOS.lke.b",[]).
  52.  
  53.  
  54. recognition(X):- rule(N, X, Y, Z), discover(Z), !,
  55. write("       это более всего похоже на ", X, " - ", Y, " (правило ", N,")"), nl,
  56. recognition(Y).
  57. recognition("сеть"):- write("Система не имеет данных, этот вирус системе не известен"),nl,!.
  58. recognition(_).
  59.  
  60. discover([]).
  61. discover([X|Y]):- ask(X), discover(Y).
  62.  
  63. complete(X):- nl, readln(Y), assert(fact(X, Y)), Y="y".
  64.  
  65. goal
  66. retractall(_), recognition("вирус").

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы