Помогите решить задачу

  • Автор темы Gonzales
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Gonzales

Гость
#1
Добрый день!
Пожалуйста, помогите решить задачку. Я с Прологом не очень дружу ... не совсем понял как считать сколько фруктов взял каждый ребенок, и как посчитать, что он солгал именно столько раз,сколько взял фруктов. И как записать выражения 5, 6 и выражения в конце задачи - I), II)??????
Всем ответившим,спасибо!


ЗАДАЧА:
Поскольку красивая фарфоровая тарелка была уже разбита, на столе стояло лишь простое стеклянное блюдо, но оно было пусто: 4 яблока и 4 банана, которые мама оставила детям на ужин, исчезли!
Мама очень рассердилась и потребовала, чтобы те, кто без разрешения взял яблоки и бананы, признались. Поднялся страшный гвалт: Юльчи, Эржи, Пишта и Иошка наперебой старались перекричать друг друга.
(1) Юльчи. Я не трогала яблок!
(2) Пишта. Но ведь я же взял с блюда...
(3) Иошка. Первой яблоко взяла Юльчи!
(4) Пишта. Это девчонки начали растаскивать фрукты с блюда!
(5) Эржи (Пиште). Помалкивал бы уж, лучше! А то один раз скажешь правду, а после этого непременно два раза соврешь!
(6) Иошкa. Ты еще споришь? Это вы, девчонки, во всем виноваты и сейчас, и в прошлый раз!
(7) Юльчи. Мальчишки первыми расхватали бананы!
(8) Пишта, (обращаясь к Юльчи). Расскажи-ка лучше, как ты взяла яблоко!
(9) Эржи. Да Иошка один взял больше половины всех яблок!
(10) Иошка (обращаясь к Эржи). Неправда!
(11) Эржи. Пишта взял яблоко и банан!
(12) Иошка. Юльчи не брала бананы!
(13) Юльчи.. Мальчишки ни разу не сказали правду!
(14) Пишта. Обе девчонки врут!
Согласитесь: докопаться до истины маме было нелегко, но она сумела все выяснить. Оказалось, что
I) лишь один из четырех детей говорил только правду;
II) каждый из детей солгал столько раз, сколько фруктов (яблок и бананов) он взял с блюда.
Сколько яблок и сколько бананов взяли с блюда каждый из четырех маленьких «разбойников»?



МОЁ РЕШЕНИЕ:

domains
mesto = symbol
spisok = mesto*
nomer = integer

predicates
nondeterm vyskazyvanie(nomer,mesto,mesto)
nondeterm vyskazyvanie(nomer,mesto,mesto,mesto)
nondeterm vyskazyvanie(nomer,mesto,mesto,mesto,mesto,mesto)
nondeterm vyyasnit(mesto,mesto,mesto,mesto,mesto,mesto,mesto,mesto)
clauses

%1. Yulchi: Ya ne trogala yablok
vyskazyvanie(1,Yulchi,Yulchi_Yabloki):- Yulchi_Yabloki=0.

%2. Pishta: No ved ya vzyal s blyuda
vyskazyvanie(2,Pishta,Pishta_Yabloki,Pishta_Banan):- Pishta_Yabloki>0;Pishta_Banan>0.

%3. Ioshka: Pervoy yabloka vzyala Yulchi
vyskazyvanie(3,Ioshka,Yulchi_Yabloki):- Yulchi_Yabloki>0.

%4. Pishta: Eto devochki nachali brat frukty s blyuda
vyskazyvanie(4,Pishta,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan):- Yulchi_Yabloki>0;Yulchi_Banan>0;Erzhi_Yabloki>0;Erzhi_Banan>0.

%5. Erzhi: Pomalkival by!A to 1 raz skazhesh pravdu,a posle etogo 2 raza sovresh
%vyskazyvanie(5,Erzhi,???):- ???.

%6. Ioshka: Ty eshe sporish? Eto vy,devchonki,vo vsem vinovaty i seychas i v proshlyi raz
vyskazyvanie(6,Ioshka,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan):- Yulchi_Yabloki+Erzhi_Yabloki=4,Yulchi_Banan+Erzhi_Banan=4.

%7. Yulchi: Malshiki pervymi rashvatali banany
vyskazyvanie(7,Yulchi,Ioshka_Banan,Pishta_Banan):- Ioshka_Banan+Pishta_Banan=4.

%8. Pishta: Yulchi,rasskazhi kak ty vzyala yabloko
vyskazyvanie(8,Pishta,Yulchi_Yabloki):- Yulchi_Yabloki=Yulchi_Yabloki+1.

%9. Erzhi: Ioshka vzyal bolshe poloviny vseh yablok
vyskazyvanie(9,Erzhi,Ioshka_Yabloki):- Ioshka_Yabloki>2.

%10. Ioshka: Obrashayas k Erzhi: Nepravda!
vyskazyvanie(10,Ioshka,Ioshka_Yabloki):- not(vyskazyvanie(9,Erzhi,Ioshka_Yabloki)).

%11. Erzhi: Pishta vzyal yabloko i banan.
vyskazyvanie(11,Erzhi,Pishta_Banan,Pishta_Yabloki):- Pishta_Banan=1,Pishta_Yabloki=1.

%12. Ioshka: Yulchi ne brala banany
vyskazyvanie(12,Ioshka,Yulchi_Banan):- Yulchi_Banan=0.

%13. Yulchi: Malchiki ni razu ne skazali pravdu
vyskazyvanie(13,Yulchi,_,_):-
not(vyskazyvanie(2,Pishta,Pishta_Yabloki,Pishta_Banan)),
not(vyskazyvanie(3,Ioshka,Yulchi_Yabloki)),
not(vyskazyvanie(4,Pishta,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan)
),
not(vyskazyvanie(6,Ioshka,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan)
),
not(vyskazyvanie(8,Pishta,Yulchi_Yabloki)),
not(vyskazyvanie(10,Ioshka,Ioshka_Yabloki)),
not(vyskazyvanie(12,Ioshka,Ioshka_Banan)),
not(vyskazyvanie(14,Pishta,_,_)).

%14. Pishta: Obe devchonki vrut
vyskazyvanie(14,Pishta,_,_):-
not(vyskazyvanie(1,Yulchi,Yulchi_Yabloki)),
not(vyskazyvanie(7,Yulchi,Ioshka_Banan,Pishta_Banan)),
not(vyskazyvanie(9,Erzhi,Ioshka_Yabloki)),
not(vyskazyvanie(11,Erzhi,Pishta_Banan,Pishta_Yabloki)),
not(vyskazyvanie(13,Yulchi,_,_)).

vyyasnit(Yulchi_Yabloki,Yulchi_Banan,Pishta_Banan,Pishta_Yabloki,Ioshka_Banan,Io
shka_Yabloki,Erzhi_Yabloki,Erzhi_Banan):-
vyskazyvanie(1,Yulchi,Yulchi_Yabloki),
vyskazyvanie(2,Pishta,Pishta_Yabloki,Pishta_Banan),
vyskazyvanie(3,Ioshka,Yulchi_Yabloki),
vyskazyvanie(4,Pishta,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan),
vyskazyvanie(6,Ioshka,Yulchi_Yabloki,Yulchi_Banan,Erzhi_Yabloki,Erzhi_Banan),
vyskazyvanie(7,Yulchi,Ioshka_Banan,Pishta_Banan),
vyskazyvanie(8,Pishta,Yulchi_Yabloki),
vyskazyvanie(9,Erzhi,Ioshka_Yabloki),
vyskazyvanie(10,Ioshka,Ioshka_Yabloki),
vyskazyvanie(11,Erzhi,Pishta_Banan,Pishta_Yabloki),
vyskazyvanie(12,Ioshka,Ioshka_Banan),
vyskazyvanie(13,Yulchi,_,_),
vyskazyvanie(14,Pishta,_,_).

goal
vyyasnit(Yulchi_Yabloki,Yulchi_Banan,Pishta_Banan,Pishta_Yabloki,Ioshka_Banan,Io
shka_Yabloki,Erzhi_Yabloki,Erzhi_Banan).
 
Статус
Закрыто для дальнейших ответов.