Двоюродные братья и сестры - Prolog

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

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

Есть такая задача: Три брата, Пьер, Поль и Жак, во время отпуска собрали всех своих детей в загородном доме. Вот что каждый из детей сказал: Изабелла. Мне на 3 года больше, чем Жану. Тереза. Моего отца зовут Жаком. Ив. Мне на 2 года больше, чем Изабелле. Мари. Я больше люблю играть с одним из своих кузенов, чем со своим братом. Катрин. Моего отца зовут Пьером. Анна. Лучше всего мы ладим с сыновьями дяди Жака. Жан. Мой отец и каждый из его братьев имеют меньше, чем по четыре ребенка. Франсуа. А у моего отца их меньше всего. Каким образом из этого разговора можно определить имя отца каждого из двоюродных братьев и сестер? Осилил написать только вот это. Не понимаю, как использовать условия о том, что кто-то кого-то старше, у кого меньше всего детей и кто с кем лучше всего ладит. Как организовать поиск решения? Понимаю, что задача на поиск родственных связей в основном, но эти условия вводят в ступор.
Листинг программы
  1. DOMAINS
  2. имя = symbol
  3. PREDICATES
  4. nondeterm ребенок(имя)
  5. nondeterm мужчина(имя)
  6. nondeterm родитель(имя, имя)
  7. CLAUSES
  8. ребенок("Изабелла").
  9. ребенок("Тереза").
  10. ребенок("Ив").
  11. ребенок("Мари").
  12. ребенок("Катрин").
  13. ребенок("Анна").
  14. ребенок("Жан").
  15. ребенок("Франсуа").
  16. мужчина("Жак").
  17. мужчина("Пьер").
  18. мужчина("Поль").
  19. родитель("Жак","Тереза").
  20. родитель("Пьер", "Катрин").

Решение задачи: «Двоюродные братья и сестры»

textual
Листинг программы
  1. solve_names(Solve) :-
  2.     % Три брата, Пьер, Поль и Жак, во время отпуска собрали всех своих детей в загородном доме.
  3.     Mans = ["Пьер", "Поль", "Жак"],
  4.     Childs =
  5.       [ ["Изабелла", "жен"], ["Жан", "муж"], ["Тереза", "жен"],
  6.         ["Ив", "муж"], ["Мари", "жен"], ["Катрин", "жен"],
  7.         ["Анна", "жен"], ["Франсуа", "муж"]
  8.       ],
  9.     % Жан. Мой отец и каждый из его братьев имеют меньше, чем по четыре ребенка.
  10.     Solve =
  11.       [ [Man1, [Child11, Child12, Child13]],
  12.         [Man2, [Child21, Child22, Child23]],
  13.         [Man3, [Child31, Child32]]
  14.       ],
  15.     permutation(Mans, [Man1, Man2, Man3]),
  16.     permutation(Childs, [Child11, Child12, Child13, Child21, Child22, Child23, Child31, Child32]),
  17.     % Изабелла. Мне на 3 года больше, чем Жану.
  18.     member([_, FamilyIsabel], Solve),
  19.     member(["Изабелла", _], FamilyIsabel), not( member(["Жан", _], FamilyIsabel) ),
  20.     % Тереза. Моего отца зовут Жаком.
  21.     member(["Жак", FamilyZhack], Solve), member(["Тереза", _], FamilyZhack),
  22.     % Ив. Мне на 2 года больше, чем Изабелле.
  23.     member([_, FamilyIv], Solve),
  24.     member(["Ив", _], FamilyIv), not( member(["Изабелла", _], FamilyIv) ),
  25.     % Мари. Я больше люблю играть с одним из своих кузенов, чем со своим братом.
  26.     member([_, FamilyMary], Solve),
  27.     member(["Мари", _], FamilyMary), member([_, "муж"], FamilyMary),
  28.     % Катрин. Моего отца зовут Пьером.
  29.     member(["Пьер", FamilyPier], Solve), member(["Катрин", _], FamilyPier),
  30.     % Анна. Лучше всего мы ладим с сыновьями дяди Жака.
  31.     not( member(["Анна", _], FamilyZhack) ),
  32.     member([SonZhack1, "муж"], FamilyZhack), member([SonZhack2, "муж"], FamilyZhack),
  33.     not( SonZhack1 = SonZhack2 ),
  34.     % Франсуа. А у моего отца их меньше всего.
  35.     member(["Франсуа", _], [Child31, Child32]),
  36.     true.

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


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

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

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

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

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

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