Решение логических задач - Prolog - Prolog

  1. Доброго времени суток уважаемые форумчане.Прошу помочь с заданием:Студенты математического факультета Артур, Василий, Надежда и Эльвира поехали на каникулах в город Санкт-Петербург. Однако в дороге выяснилось, что им нравятся картины разных художников (Айвазовский, Босх, Левитан, Рембрандт). Поэтому на следующий день трое из ребят разошлись по различным музеям (Эрмитаж, Русский музей, Корпус Бенуа Русского музея), а Василий решил посетить музей космонавтики (однако он по-прежнему любит живопись, просто обнаружилось, что в Санкт- Петербурге нет интересующих его полотен). Известны следующие факты. В корпусе Бенуа была выставка полотен Левитана. В Русском музее не выставляются картины иностранных авторов, а в Эрмитаже почти нет русских (будем считать, что там нет Айвазовского и Левитана). Надежда любит маринистов и больше всего Айвазовского, а Эльвира предпочитает Рембрандта. Найдите, куда каждый из студентов направился и каковы его или ее вкусы. Не могу понять как записать условия. Буду рад любой помощи. Спасибо!


textual

Код к задаче: «Решение логических задач - Prolog - Prolog»

%факты
имя(артур).
имя(василий).
имя(надежда).
имя(эльвира).
 
музей(эрмитаж).
музей(русский).
музей(бенуа).
музей(космос).
 
художник(айвазовский).
художник(босх).
художник(левитан).
художник(рембрант).
 
/* unique(List) – проверка того, что ни один элемент списка не повторяется 
 * дважды. В списке нет повторяющихся элементов, если первый элемент списка 
 * не встречается в хвосте, а также, в хвосте нет повторяющихся элементов. 
 * Условием выхода из рекурсии может быть пустота исходного списка – в нем 
 * гарантированно нет повторяющихся элементов.
*/
 
unique([]):-!.
unique([Head|Tail]):-
   member(Head, Tail), !, fail;
   unique(Tail).
 
/* У студента уникальные имя, музей, художник */
 
решение(Студенты) :-
    Студенты = [студент(Имя1, Музей1, Художник1),
                студент(Имя2, Музей2, Художник2),
                студент(Имя3, Музей3, Художник3),
                студент(Имя4, Музей4, Художник4)],
    
    имя(Имя1), имя(Имя2), имя(Имя3), имя(Имя4),
    unique([Имя1,Имя2,Имя3,Имя4]),
    музей(Музей1), музей(Музей2), музей(Музей3), музей(Музей4),
    unique([Музей1,Музей2,Музей3,Музей4]),
    художник(Художник1), художник(Художник2), художник(Художник3), художник(Художник4),
    unique([Художник1,Художник2,Художник3,Художник4]),
 
/* Василий решил посетить музей космонавтики */
 
    member(студент(василий, космос, Художник1), Студенты),
    
/* В корпусе Бенуа была выставка полотен Левитана */
 
    member(студент(Имя2, бенуа, левитан), Студенты),
    
/* Надежда любит  Айвазовского */
    
    member(студент(надежда, Музей3, айвазовский), Студенты),
    
/* Эльвира предпочитает Рембрандта */
 
    member(студент(эльвира, Музей4, рембрант), Студенты),
    
/* В Русском музее не выставляются картины иностранных авторов */
    
    not(member(студент(_,эрмитаж,левитан), Студенты)),
    not(member(студент(_,эрмитаж,айвазовский), Студенты)),
        
/* в Эрмитаже нет русских */
 
    not(member(студент(_,русский,босх), Студенты)),
    not(member(студент(_,русский,рембрант), Студенты)).
        
/** <examples>
 
?- решение(Студенты).
 
*/
 
/*
 * [студент(василий, космос, босх), студент(артур, бенуа, левитан), студент(надежда, русский, айвазовский), студент(эльвира, эрмитаж, рембрант)]
*/

СДЕЛАЙТЕ РЕПОСТ

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



Похожие ответы
  1. Всем доброго времени суток ! Условия задачи прилагается в изображении! Мой код для решения

  1. Здравствуйте. Есть задача: Однажды в Артеке за круглым столом оказалось пятеро ребят родом из Москвы, Санкт-Петербурга, Новгорода, Перми и Томска: Юра, Толя, Алеша, Коля и Витя. Москвич сидел между томичем и Витей, санкт-петербуржец - между Юрой и Толей, а напротив него сидели пермяк и Алеша. Коля никогда не был в Санкт-Петербурге, а Юра не бывал в Москве и Томске, а томич с Толей регулярно переписываются. Определите, в каком городе живет каждый из ребят. Есть решение с использованием списков:

  1. Здравствуйте, мне нужно решить логическую с использованием Prolog'a, никак не получается решить, помогите, пожалуйста. Заранее благодарен! Текст задачи: Борисов, Кириллов, Данин и Савин - инженеры. Один из них- автомеханик, другой- химик, третий- строитель, четвертый- радиотехник. Борисов, который обыгрывает в шахматы Данина, но проигрывает Савину, бегает на лыжах лучше того инженера, который моложе его, и ходит в театр чаще, чем тот инженер, который старше Кириллова. Химик, который посещает, театр чаще, чем автомеханик, но реже, чем строитель, не является ни самым молодым, ни самым старшим из этой четверки. Строитель, который на лыжах бегает хуже, чем радиотехник, как правило, проигрывает в шахматных сражениях автомеханику. Самый пожилой из инженеров лучше всех играет в шахматы и чаще всех бывает в театре, а самый молодой лучше всех ходит на лыжах. Назовите профессии каждого из инженеров, если известно, что ни в спорте, ни в приверженности к театру среди них нет двух одинаковых.

  1. Доброго времени суток. Помогите, пожалуйста, с программой, решающей квадратное уравнение в комплексных числах. Изначально было задание просто составить программу, решающую квадратное уравнение. Однако было добавлено еще условие, что при дискриминанте меньше 0 нужно решить квадратное уравнение в комплексных числах. Вопрос, как это сделать? Перепробовал много, вот текст программы.

  1. Помогите записать Краснодар - столица краснодарского края. Население Краснодара 1 млн. Краснодарский край граничит с Ростовской областью и Ставропольским краем. Столица ростовской области - город Ростов-на-Дону с населением 1.5 млн. В ростовской области находится город Таганрог с населением 250 тыс. Река Кубань протекает по Краснодарскому краю и Ростовской области.

  1. Нужно составить программу решения уравнения 2х+7у-3z=4 в целых числах, не превосходящих по абсолютной величине 15.

  1. Привет, жители форума! Нужна ваша помощь со SWI-Prolog! Как организовать решение функции?

  1. Приветствую жителей форума! Prolog окончательно сломал мне мозг %) Подскажите, как организовать решение функции?

  1. Доброго времени суток! Требуется помощь в решении задачи на Prolog : Пользуясь методом «образовать и проверить», напишите PROLOG-программу для решения следующей головоломки: Пять разноцветных домиков, пронумерованных с 1-го по 5-ый, расположены в ряд. Похоже, их хозяева перестарались, пытаясь приукрасить своё жильё снаружи. В каждом доме стены, окна и крыша выкрашены в разные цвета радужной палитры. Необходимо определить цвета «частей» каждого дома, если известно, что: 1. Дом с оранжевой крышей и синими стенами расположен не в центре. 2. В третьем доме зелёные окна. 3. Во втором доме жёлтые стены и красные окна. 4. Пятый дом под красной крышей. 5. Дом с оранжевыми стенами и голубыми окнами расположен рядом с домом с фиолетовыми стенами под зелёной крышей. 6. Среди этих домов есть дома с голубой и жёлтой крышей. 7. Кому-то из хозяев очень нравятся стены красного цвета, а кто-то умудрился покрасить окна своего дома в синий цвет. 8. Фиолетовые окна смотрятся просто ужасно. Буду признателен за любую помощь!