Твистик любит твист, но слушает рок-н-ролл. Роллик любит рок-н-ролл, но слушает вальсы. Вальсик слушает «попсу» и не любит только буги-вуги. Человечек – супермел, если он слушает или любит рок-н-ролл.
Исходный код программы на Visual Prolog:
domains
name = string
predicates
любит(name, name)
слушает(name, name)
main
result() % выполняет поиск фактов
clauses
любит("Твистик", "твист").
любит("Роллик", "рок-н-ролл").
любит("Вальсик", "твист").
любит("Вальсик", "попса").
любит("Вальсик", "вальсы").
любит("Вальсик", "рок-н-ролл").
слушает("Твистик", "рок-н-ролл").
слушает("Роллик", "вальсы").
слушает("Вальсик", "попса").
result() :-
любит(Name, Type), Type = "рок-н-ролл", write("\n", Name, "\n"),
fail. % этот предикат заставляет пролог искать заново
result() :-
слушает(Name, Type), Type = "рок-н-ролл", write("\n", Name, "\n"),
fail;
% здесь ищем только один раз (находим только одну верную запись)
слушает(_, _).
main :-
write("\t\tСписок супермелов:\n"),
result(), write("\n"), readln(_).
goal
main.
|