Логическая задача с правдивыми и ложными высказываниями - Prolog

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

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

Всем привет! По курсу Пролога пытаюсь решить следующую задачу: Тетушка Амелия побывала в Париже в гостях у трех своих маленьких племянников и много гуляла с ними по городу. После этого каждый из них рассказал следующее. Первый племянник. Мы поднялись на Эйфелеву башню, но не были на Монпарнасе, однако мы посетили Триумфальную арку. Второй племянник. Мы поднялись на Эйфелеву башню и побывали на Монпарнасе. Нo мы не посещали ни Триумфальную арку, ни зал для игры в мяч. Третий племянник. Мы не поднимались на Эйфелеву башню, но посетили Триумфальную арку. Если каждый ребенок солгал один (и только один) раз, то какие достопримечательности Парижа посетили они вместе с тетушкой Амелией на самом деле? Никакие мысли в голову не приходили. После беседы с преподавателем все равно не разобралась, но попыталась что-то изобразить, это, конечно, не работает. В итоге хочу получить список мест, где были, но не знаю, как его задать. Посмотрите пожалуйста, кому не лень Заранее спасибо за помощь и ваши идеи!
Листинг программы
  1. DOMAINS
  2. племянник,место = symbol
  3. номер = integer
  4. признак=правда;ложь
  5. высказывание=высказывание(племянник,номер,место,признак)
  6. список = место*
  7. список_номеров = номер*
  8. PREDICATES
  9. nondeterm сказал(племянник,номер,место)
  10. nondeterm проверка_высказывания(высказывание)
  11. nondeterm посетили(список)
  12. nondeterm один_из(номер,список_номеров)
  13. nondeterm один_из(место,список)
  14. CLAUSES
  15. один_из(Место,[Место|_]).
  16. один_из(Место,[_|Хвост]):-один_из(Место,Хвост).
  17. один_из(Номер_высказывания,[Номер_высказывания|_]).
  18. один_из(Номер_высказывания,[_|Хвост]):-один_из(Номер_высказывания,Хвост).
  19. %Первый племянник. Мы поднялись на Эйфелеву башню,
  20. сказал(ребенок1,1,Место_посещения):- Место_посещения = эйфелева_башня.
  21. %но не были на Монпарнасе,
  22. сказал(ребенок1,2,Место_посещения):- not(Место_посещения = монпарнас).
  23. %однако мы посетили Триумфальную арку.
  24. сказал(ребенок1,3,Место_посещения):- Место_посещения = триумфальная_арка.
  25. %Второй племянник. Мы поднялись на Эйфелеву башню
  26. сказал(ребенок2,1,Место_посещения):- Место_посещения = эйфелева_башня.
  27. побывали на Монпарнасе.
  28. сказал(ребенок2,2,Место_посещения):- Место_посещения = монпарнас.
  29. o мы не посещали ни Триумфальную арку,
  30. сказал(ребенок2,3,Место_посещения):- not(Место_посещения = триумфальная_арка).
  31. % ни зал для игры в мяч.
  32. сказал(ребенок2,4,Место_посещения):- not(Место_посещения = зал_для_игры_в_мяч).
  33. %Третий племянник. Мы не поднимались на Эйфелеву башню,
  34. сказал(ребенок3,1,Место_посещения):- not(Место_посещения = эйфелева_башня).
  35. % но посетили Триумфальную арку.
  36. сказал(ребенок3,2,Место_посещения):- Место_посещения = триумфальная_арка.
  37.  
  38. проверка_высказывания(высказывание(Ребенок,Номер,Место_Парижа,Характер)):-
  39. Характер=правда, сказал(Ребенок,Номер,Место_Парижа);
  40. Характер=ложь, not(сказал(Ребенок,Номер,Место_Парижа)).
  41. посетили(Места):-
  42. N1=[1,2,3], N2=[1,2,3,4], N3=[1,2],
  43. один_из(Н11,N1),один_из(Н12,N1),один_из(Н13,N1),
  44. один_из(Н21,N2),один_из(Н22,N2),один_из(Н23,N2),один_из(Н24,N2),
  45. один_из(Н31,N3),один_из(Н32,N3),
  46. not1112),not1113),not1213),
  47. not2122),not2123),not2124),not2223),not2224),not2324),
  48. not3132),
  49.  
  50. not(Место11=Место12),not(Место11=Место13),not(Место12=Место13),
  51. not(Место21=Место22),not(Место21=Место23),not(Место21=Место24),not(Место22=Место23),not(Место22=Место24),not(Место23=Место24),
  52. not(Место31=Место32),
  53. проверка_высказывания(высказывание(ребенок111,Место11,правда)),
  54. проверка_высказывания(высказывание(ребенок112,Место12,правда)),
  55. проверка_высказывания(высказывание(ребенок113,Место13,ложь)),
  56. проверка_высказывания(высказывание(ребенок221,Место21,правда)),
  57. проверка_высказывания(высказывание(ребенок222,Место22,правда)),
  58. проверка_высказывания(высказывание(ребенок223,Место23,правда)),
  59. проверка_высказывания(высказывание(ребенок224,Место24,ложь)),
  60. проверка_высказывания(высказывание(ребенок331,Место31,правда)),
  61. проверка_высказывания(высказывание(ребенок332,Место32,ложь)),
  62. Места=[сказал(_,_,_)|_].
  63.  
  64. GOAL
  65. посетили(Места).

Решение задачи: «Логическая задача с правдивыми и ложными высказываниями»

textual
Листинг программы
  1. DOMAINS
  2.     племянник,место = symbol
  3.     номер = integer
  4.     признак=правда;ложь
  5.     значение=были;не_были
  6.     высказывание = высказывание(племянник,номер,место)
  7.     список = место*
  8.     список_номеров = номер*
  9.     список_высказываний = высказывание*
  10.     статус = статус(место,значение)
  11.     племянники=племянник*
  12. PREDICATES
  13.     nondeterm дети(племянники)
  14.     nondeterm достопримечательности(список)
  15.     nondeterm сказал(племянник,номер,место)
  16.     nondeterm проверка_высказывания(высказывание)
  17.     nondeterm посетили(список)
  18.     nondeterm один_из(номер,список_номеров)
  19.     nondeterm один_из(место,список)
  20.     nondeterm один_из(высказывание,список_высказываний)
  21. CLAUSES
  22.     один_из(Место,[Место|_]).
  23.     один_из(Место,[_|Хвост]):-один_из(Место,Хвост).
  24.  
  25.     один_из(Номер_высказывания,[Номер_высказывания|_]).
  26.     один_из(Номер_высказывания,[_|Хвост]):-один_из(Номер_высказывания,Хвост).
  27.  
  28.     один_из(Высказывание,[Высказывание|_]).
  29.     один_из(Высказывание,[_|Хвост]):-один_из(Высказывание,Хвост).
  30.  
  31.     проверка_высказывания(высказывание(Ребенок,Номер,Место_Парижа)):-
  32.      сказал(Ребенок,Номер,Место_Парижа).
  33.    
  34.     проверка_высказывания(высказывание(Ребенок,Номер,Место_Парижа)):-
  35.      not(сказал(Ребенок,Номер,Место_Парижа)).
  36.    
  37.     достопримечательности(Дост):- Дост = [эйфелева_башня, монпарнас, триумфальная_арка, зал_для_игры_в_мяч].
  38.     дети(Племянники):- Племянники = [ребенок1, ребенок2, ребенок3].
  39.    
  40.     %Первый племянник. Мы поднялись на Эйфелеву башню,
  41.     сказал(ребенок1,1,Место_11):- Место_11 = эйфелева_башня, статус(Место_11,были).
  42. %но не были на Монпарнасе,
  43.     сказал(ребенок1,2,Место_12):-  Место_12 = монпарнас, статус(Место_12,не_были).
  44. %однако мы посетили Триумфальную арку. 
  45.     сказал(ребенок1,3,Место_13):- Место_13 = триумфальная_арка, статус(Место_13,были).
  46.      
  47. %Второй племянник. Мы поднялись на Эйфелеву башню
  48.     сказал(ребенок2,1,Место_21):- Место_21 = эйфелева_башня, статус(Место_21,были).
  49. побывали на Монпарнасе.
  50.     сказал(ребенок2,2,Место_22):- Место_22 = монпарнас, статус(Место_22,были).
  51. o мы не посещали ни Триумфальную арку,
  52.     сказал(ребенок2,3,Место_23):- Место_23 = триумфальная_арка, статус(Место_23,не_были).
  53. % ни зал для игры в мяч.
  54.     сказал(ребенок2,4,Место_24):- Место_24 = зал_для_игры_в_мяч, статус(Место_24,не_были).
  55.  
  56. %Третий племянник. Мы не поднимались на Эйфелеву башню,
  57.     сказал(ребенок3,1,Место_31):- Место_31 = эйфелева_башня, статус(Место_31,не_были).
  58. % но посетили Триумфальную арку.
  59.     сказал(ребенок3,2,Место_32):- Место_32 = триумфальная_арка, статус(Место_32,были).
  60.    
  61.     посетили(Места):-
  62.    
  63.     статус(Место_Парижа_1, были),статус(Место_Парижа_2, были),статус(Место_Парижа_3, были),
  64.    
  65.         Места=[Место_Парижа_1, Место_Парижа_2, Место_Парижа_3],
  66.    
  67.    
  68.     N1=[1,2,3], N2=[1,2,3,4], N3=[1,2],
  69.     один_из(Н11,N1),один_из(Н12,N1),один_из(Н13,N1),
  70.     один_из(Н21,N2),один_из(Н22,N2),один_из(Н23,N2),один_из(Н24,N2),
  71.     один_из(Н31,N3),один_из(Н32,N3),
  72.  
  73.     not1112),not1113),not1213),
  74.     not2122),not2123),not2124),not2223),not2224),not2324),
  75.     not3132),
  76.  
  77.     один_из(Место11,Места),один_из(Место12,Места),один_из(Место13,Места),
  78.     один_из(Место21,Места),один_из(Место22,Места),один_из(Место23,Места),один_из(Место24,Места),
  79.     один_из(Место31,Места),один_из(Место32,Места),
  80.    
  81.     В11=высказывание(ребенок111,Место11,правда),
  82.     В12=высказывание(ребенок112,Место12,правда),
  83.     В13=высказывание(ребенок113,Место13,ложь),
  84.     В21=высказывание(ребенок221,Место21,правда),
  85.     В22=высказывание(ребенок222,Место22,правда),
  86.     В23=высказывание(ребенок223,Место23,правда),
  87.     В24=высказывание(ребенок224,Место24,ложь),
  88.     В31=высказывание(ребенок331,Место31,правда),
  89.     В32=высказывание(ребенок332,Место32,ложь),
  90.     Высказывания=[В111213212223243132],
  91.  
  92.     один_из(D1,Высказывания),
  93.         проверка_высказывания(D1),
  94.        
  95.         один_из(D2,Высказывания), not(D1=D2),
  96.         проверка_высказывания(D2),
  97.        
  98.         один_из(D3,Высказывания), not(D1=D3),not(D2=D3),
  99.         проверка_высказывания(D3),
  100.        
  101.         один_из(D4,Высказывания), not(D1=D4),not(D2=D4),not(D3=D4),
  102.         проверка_высказывания(D4),
  103.        
  104.         один_из(D5,Высказывания), not(D1=D5),not(D2=D5),not(D3=D5),not(D4=D5),
  105.                 проверка_высказывания(D5),
  106.                          
  107.         один_из(D6,Высказывания), not(D1=D6),not(D2=D6),not(D3=D6),not(D4=D6),
  108.                          not(D5=D6),
  109.         проверка_высказывания(D6),
  110.                          
  111.         один_из(D7,Высказывания), not(D1=D7),not(D2=D7),not(D3=D7),not(D4=D7),
  112.                          not(D5=D7),not(D6=D7),
  113.                 проверка_высказывания(D7),
  114.                          
  115.         один_из(D8,Высказывания), not(D1=D8),not(D2=D8),not(D3=D8),not(D4=D8),
  116.                              not(D5=D8),not(D6=D8),not(D7=D8),
  117.                 проверка_высказывания(D8),
  118.                          
  119.         один_из(D9,Высказывания), not(D1=D9),not(D2=D9),not(D3=D9),not(D4=D9),
  120.                          not(D5=D9),not(D6=D9),not(D7=D9),not(D8=D9),
  121.                 проверка_высказывания(D9).
  122.  
  123.  
  124. GOAL
  125.     посетили(Места).

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


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

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

14   голосов , оценка 3.857 из 5

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

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

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