Задача о любви без взаимности - Prolog

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

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

Задача о любви без взаимности
Листинг программы
  1. %Про любовь без взаимности
  2. %
  3. %Трое юношей: Коля, Петя и Юра - влюблены в трех девушек: Таню, Зину и Галю. Но это любовь без взаимности.
  4. %1. Коля любит девушку, влюбленную в юношу, который любит Таню.
  5. %2. Петя любит девушку, влюбленную в юношу, который любит Зину.
  6. %3. Зина не любит Юру.
  7. %
  8. %Кто в кого влюблен?
  9. DOMAINS
  10. человек = symbol
  11. PREDICATES
  12. nondeterm имя_юноши(человек)
  13. nondeterm имя_девушки(человек)
  14. nondeterm любит(человек,человек)
  15. nondeterm ищем_решение(человек,человек,человек,человек,человек,человек)
  16. CLAUSES
  17. % перечисляем имена
  18. имя_юноши("коля").
  19. имя_юноши("петя").
  20. имя_юноши("юра").
  21. имя_девушки("таня").
  22. имя_девушки("зина").
  23. имя_девушки("галя").
  24. %ограничение любви без взаимности
  25. любит(Юноша,Девушка):-
  26. имя_юноши(Юноша),имя_девушки(Девушка),not(любит(Девушка,Юноша)).
  27. любит(Девушка,Юноша):-
  28. имя_девушки(Девушка),имя_юноши(Юноша),not(любит(Юноша,Девушка)).
  29. %условия задачи
  30. любит("коля",Девушка):-
  31. любит(Девушка,Юноша),любит(Юноша,"таня").
  32. любит("петя",Девушка):-
  33. любит(Девушка,Юноша),любит(Юноша,"зина").
  34. любит("зина",Юноша):-
  35. not(Юноша = "юра").
  36. %формирование гипотезы
  37. ищем_решение(Имя1,Имя2,Имя3,Имя4,Имя5,Имя6):-
  38. имя_юноши(Имя1),
  39. имя_юноши(Имя2),not(Имя2=Имя1),
  40. имя_юноши(Имя3),not(Имя3=Имя1),not(Имя3=Имя2),
  41. имя_девушки(Имя4),
  42. имя_девушки(Имя5),not(Имя5=Имя4),
  43. имя_девушки(Имя6),not(Имя6=Имя4),not(Имя6=Имя5),
  44. любит(Имя1,Имя2),
  45. любит(Имя2,Имя3),
  46. любит(Имя3,Имя4),
  47. любит(Имя4,Имя5),
  48. любит(Имя5,Имя6),
  49. любит(Имя6,Имя1).
  50. GOAL
  51. ищем_решение(Имя1,Имя2,Имя3,Имя4,Имя5,Имя6).
помогите начинающему чем сможете. И да, если можно, не меняйте сильно метод и структуру.

Решение задачи: «Задача о любви без взаимности»

textual
Листинг программы
  1. PREDICATES
  2. male(string) /*Парни*/
  3. female(string) /*Девушки*/
  4. love(string,string)
  5. sol(string, string, string, string, string, string) /*решение*/
  6. print.
  7.  
  8. CLAUSES
  9. /*заполняем людей*/
  10. male("Kolya").
  11. male("Dima").
  12. male("Yura").
  13. female("Anya").
  14. female("Lena").
  15. female("Vika").
  16.  
  17.  
  18. love(X, Y):- male(X), female(Y).
  19. love(Y, X):- male(X), female(Y).
  20.  
  21. love("Kolya", Y):-love(Y, X), love(X, "Lena").
  22. love("Dima", Y):-love(Y, X), love(X, "Vika").
  23. love("Lena", X):- male(X), not (X="Yura").
  24.  
  25. sol(X1, X2, X3, Y1, Y2, Y3):-
  26.             male(X1), male(X2), male(X3),
  27.             female(Y1), female(Y2), female(Y3),
  28.             love(X1, Y1),
  29.             not(love(Y1,X1)),
  30.             love(X2, Y2),
  31.             not(love(Y2,X2)),
  32.             love(X3, Y3),
  33.             not(love(Y3,X3)),
  34.             /*Каждый человек должен быть только один раз*/
  35.             X1<>X2,
  36.             X1<>X3,
  37.             X2<>X3,
  38.             Y1<>Y2,
  39.             Y1<>Y3,
  40.             Y2<>Y3.
  41.            
  42. /*Печать результатов.*/
  43. print:- sol(X1, X2, X3, Y1, Y2, Y3),
  44.         write(X1, " - ", Y1, ". ",
  45.                 X2, " - ", Y2, ". ",
  46.                 X3, " - ", Y3, ". ").

Объяснение кода листинга программы

  1. Создаются шесть человек: Коля, Дима, Юра, Аня, Лена, Вика.
  2. Задаются три пары людей, которые любят друг друга: Коля любит Лену, Дима любит Вику, а Лена любит Юру.
  3. Три пары людей, которые не любят друг друга: Коля не любит Диму, Дима не любит Колю, а Юра не любит Лену.
  4. Оформляется факт того, что каждый человек должен быть только один раз: Коля не может быть Димой или Юрой, Дима не может быть Колей или Юрой, а Юра не может быть Колей или Димой.
  5. Аналогично оформляется факт того, что каждая девушка должна быть только один раз: Аня не может быть Леней или Викой, Лена не может быть Аней или Викой, а Вика не может быть Аней или Леной.
  6. Формулируется основная задача: нахождение шести пар людей, которые любят друг друга.
  7. Для решения этой задачи используется метод перебора всех возможных комбинаций пар людей и проверки условий, что они любят друг друга, а их имена не совпадают.
  8. Если найдена пара людей, удовлетворяющая всем условиям, то она выводится на экран.
  9. Если не найдено ни одной пары людей, удовлетворяющей всем условиям, то выводится сообщение об этом.

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


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

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

11   голосов , оценка 4.273 из 5

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

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

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