% vim:set syntax=prolog: ?- writeln("Задание 2:"). италия("Рим"). италия("Милан"). италия("Неаполь"). италия("Турин"). италия("Палермо"). италия("Генуя"). италия("Болонья"). италия("Флоренция"). италия("Бари"). италия("Катания"). россия("Москва"). россия("Санкт-Петербург"). россия("Новосибирск"). россия("Екатеринбург"). россия("Казань"). россия("Нижний Новгород"). россия("Челябинск"). россия("Красноярск"). россия("Самара"). отдыхает("Саша", "Казань"). отдыхает("Анна", "Самара"). отдыхает("Анна", "Красноярск"). отдыхает("Миша", "Турин"). отдыхает("Коля", "Милан"). отдыхает("Катя", "Палермо"). отдыхает("Виктор", "Москва"). отдыхает("Виктор", "Санкт-Петербург"). отдыхает("Андрей", "Генуя"). отдыхает("Олег", "Болонья"). отдыхает("Ольга", "Флоренция"). отдыхает("Катя", "Неаполь"). отдыхает("Олег", "Красноярск"). женщина("Ольга"). женщина("Катя"). женщина("Саша"). женщина("Анна"). женщина("Катя"). мужчина("Виктор"). мужчина("Виктор"). мужчина("Андрей"). мужчина("Олег"). мужчина("Олег"). мужчина("Миша"). мужчина("Коля"). ?- writeln("Список женщин, отдыхающих в России:"). ?- forall((отдыхает(Кто, Где), женщина(Кто), россия(Где)), (write("- "), writeln(Кто))). ?- writeln("Список мужчин, отдыхающих в Италии:"). ?- forall((отдыхает(Кто, Где), мужчина(Кто), италия(Где)), (write("- "), writeln(Кто))). ?- writeln("\n\nЗадание 4:"). рейс("А505"). рейс("Р420"). рейс("У690"). рейс("М404"). рейс("Т220"). назначение("А505", "Москва"). назначение("Р420", "Саратов"). назначение("У690", "Пермь"). назначение("М404", "Санкт-Петербург"). назначение("Т220", "Грозный"). вылет("А505", 1101). вылет("Р420", 1253). вылет("У690", 721). вылет("М404", 1827). вылет("Т220", 2205). дни("А505", "ежедн"). дни("Р420", "чёт"). дни("У690", "нечёт"). дни("М404", "ежедн"). дни("Т220", "чёт"). информация(Номер) :- рейс(Номер) , назначение(Номер, Город) , вылет(Номер, Время) , дни(Номер, Частота) , write("- Самолёт #"), write(Номер) , write(", В город: "), write(Город) , write(", Время: "), write(Время) , write(", "), writeln(Частота), !. ?- writeln("Информация о всех рейсах:"). ?- forall(рейс(Номер), информация(Номер)). в_город_чёт(Номер, Город) :- назначение(Номер, Город), дни(Номер, "чёт"). ?- writeln("Информация о самолётах, вылетающих по чётным дням в Саратов:"). ?- forall((рейс(Номер), в_город_чёт(Номер, "Саратов")), информация(Номер)). ежедн_не_позже(Номер, ВремяФильтр) :- вылет(Номер, Время) , дни(Номер, "ежедн") , ВремяФильтр >= Время. ?- writeln("Самолеты, вылетающие ежедневно не позже '12:00':"). ?- forall((рейс(Номер), ежедн_не_позже(Номер, 1200)), информация(Номер)). ?- writeln("\n\nЗадание 6:"). перевод(книга, book). перевод(книга, volume). перевод(раздел, volume). перевод(стол, table). перевод(стол, desk). перевод(дом, house). перевод(дом, home). перевод(собака, dog). перевод(кошка, cat). перевод(яблоко, apple). перевод(вода, water). перевод(солнце, sun). перевод(небо, sky). ?- writeln("Содержимое словаря:"). ?- forall(перевод(X, Y), (write(X), write(" - "), writeln(Y))). ?- writeln("Возможные переводы слова 'volume':"). ?- forall(перевод(X, volume), writeln(X)). ?- writeln("Возможные переводы слова 'стол':"). ?- forall(перевод(стол, X), writeln(X)). ?- writeln("\n\nЗадание 8:"). % Факты о учениках и их увлечениях ученик(анна, 9). ученик(петр, 9). ученик(олег, 10). ученик(ирина, 10). ученик(светлана, 11). ученик(дмитрий, 11). увлекается(анна, кино). увлекается(петр, музыка). увлекается(олег, кино). увлекается(ирина, спорт). увлекается(светлана, кино). увлекается(дмитрий, кино). ?- writeln('Увлечения учеников:'). ?- forall( (ученик(Имя, Класс), увлекается(Имя, Увлечение)), (write(Имя), write(' из класса '), write(Класс), write(' увлекается '), writeln(Увлечение))). пары_для_кино(Класс) :- ученик(Имя1, Класс), увлекается(Имя1, кино), ученик(Имя2, Класс2), увлекается(Имя2, кино), Класс \= Класс2, write(Имя1), write(' из класса '), write(Класс), write(' и '), write(Имя2), write(' из класса '), write(Класс2), nl, fail. ?- nl, writeln("Пары для похода в кино:"). ?- пары_для_кино(_). ?- halt.