![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
avchent |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Привет всем!
Я только изучаю SWI-Prolog. Вот исходник для решения задачи. === cut === % Будет ли в результате работы вирус на комьютере Z. % Если есть группа людей, с именами A, B, C, D... Z % Кое-то из них - друзья, и кое-кто имеет ПК. % На компьютере человека А появился вирус. % Считается что если у двух людей есть ПК и они дружат, % то они обмениваются файлами и вирус распространяется. q :- halt. % ---- DataBase -----------------------\ % They have computers has_pc(a). has_pc©. has_pc(d). has_pc(z). % They are friends friend(a,b). friend(a,c). friend(b,e). friend(c,d). friend(d,f). friend(f,z). % He has a virus has_vir(a). % ---- DataBase -----------------------/ % ------- example ------------- % Virus' path, which is possible (X - has_pc, x - hasn't) % A -> b % A -> C -> D -> f % -----------------------------\ friends(A,B) :- friend(A,B). friends(A,B) :- friend(B,A). % sensitive to virus (can infect to each other) sensitive(A,B) :- A \== B, has_pc(A), has_pc(B), friend(A,B). % line_1 % friends(A,B). % line_2 % ^^^^^^^^^^^^^ % здесь есть проблема: % <friend> все работает. Can_infect(a,X) выдает: X=c, X=d, но % can_infect(d,X) выдает "No" из-за другого порядка перечисления друзей % (есть friend(c,d) но нет friend(d,c)). % Я пытаюсь использовать <friends> вместо <friend> % (закомментируйте line_1 и раскомментируйте line_2) % но тогда я получаю бесконечный цикл при вызове сan_infect(a,X) % --- recursion ---------------------\ can_infect(A,B) :- sensitive(A,B). % exit from recursion can_infect(A,B) :- sensitive(A,C), can_infect(C,B). % --- recursion ---------------------/ is_infected(Z) :- has_vir(Z). is_infected(Z) :- can_infect(a,Z). === cut === Может ли кто подсказать почему появляется бесконечный цикл при вызове can_infect(a,X) в случае использования friends вместо friend в правиле sensitive ? Или можно сделать как-то по другому ? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |