Задача на ПРОЛОГ-Д
Здравствуйте, вот надо сделать задачу на данном языке программирования, если кто-нибудь изучал, помогите решить вопрос о взаимосвязи родственников, имеем:
мама(Оля,Сергей) папа(Бронислав, Сергей) брат(Саня,Сергей) сестра(Наталья,Сергей) бабушка(Груня,Сергей) Описание родственников идет от имени Сергея, у его есть папа,мама, брат, сестра, бабушка. А как установить правило, что они все родственники, т.е. нужно задать вопрос кто является мамой у сестры Натальи, ну и получить ответ Оля. Вариант с описанием всех родственников не катит, т.к. "это слишком просто" |
Вариант с описанием родственников не катит - имеется ввиду втупую прописать мама(Оля, Наталья) или имеется ввиду что-то другое?
Установить что они родственники - имеется ввиду полный набор? Просто есть набольшая проблема - бабушка она чья мама? Оли или Бронислава? Или нужно только для младшего поколения? |
Фу, я думал никто не поможет. Вариант, что прописать типа:
мама(Оля,Сергей) мама(Оля,Саня) мама(Оля,Наталья) папа(Бронислав, Сергей) папа(Бронислав, Саня) папа(Бронислав, Наталья) брат(Саня,Сергей) брат(Сергей,Саня) и т.п. Не катит, т.к. больно просто, надо установить связь между всеми родственниками, что Саня Сергей и Наталья они друг другу братья и сестры, и что Оля и Бронислав являются тоже ссответсвенно мамой и папой Наталье и Сане, а бабушку выкинуть вобще можно. Связь родственников типа: мама(Оля,Сергей):-брат(Саня,Сергей) И чтоб потом можно было задать вопрос кто является мамой или папой Сани и Натальи. Вот. Связь я не знаю как установить, т.к. нам сказали делайте лабы и все. Перепробывал все варианты. |
Тут нужно использовать переменные (начинаются с заглавных букв или с символа подчеркивания).
Для определения кто чья мама подойдёт такое описание: мама(X, Y) :- брат(Y, Z), мама(X, Z). мама(X, Y) :- сестра(Y, Z), мама(X, Z). Что по русски звучит "X - мама Y при условии, что Y - брат Z, а X - мама Z" И то же самое для сестры. Где-то через час будет минутка - напишу целиком код программы для определения кто чей мама\папа и сестра\брат. |
В общем вот что получилось:
НО! Есть тут одна непонятка - написал прогу я исходя из того что ты в первом посте указал что всё описывается именно от имени Сергея. Соответственно всё работает при таком раскладе нормально, но если ты попробуешь сообщить ему факт где будет указан не Сергей - будет косяк. Сделал я это из расчета что бы не усложнять излишне прогу раз такие условия. Если это не так - пиши, чего-нить придумаем! |
Не, все гуд, даже если что-то не прокатит скажу чтоб объяснял тогда как пральна. Огромнейшее тебе СПАСИБО, никто вобще просто не знает как это сделать, выручил!
|
птица(x,y)<-взмах(x,y),птица(x,y);
взмах(x,y)<-вниз(x,y,1),вниз(x,y,0),вверх(x,y,1),вверх(x,y,0); вниз(x,y,c)<-сдв(x,y,z,t,u,v),ЛИНИЯ(z,y,u,y,1); вверх(x,y)<-сдв(x,y,z,t,u,v),ЛИНИЯ(x,y,z,t,1),ЛИНИЯ(x,y,u,v,1) ; сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v); сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y); сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y); дом(x,y)<-крыша(x,y,r,f), этаж(x,y,f); этаж(x,y,f)<-СЛОЖЕНИЕ(y,20,z),квадр(x,y,f,z); крыша(x,y,r,f)<-СЛОЖЕНИЕ(r,10,y),СЛОЖЕНИЕ(x,20,f),треуг(x,y,r,f); треуг(x,y,z,t)<-ЛИНИЯ(x,y,t,y,1),ДЕЛЕНИЕ2(x,t,f),угол(x,y,z,t,f); угол(x,y,z,t,f)<-ЛИНИЯ(x,y,f,z,1),ЛИНИЯ(f,z,t,y,1); ДЕЛЕНИЕ2(x,t,f)<-СЛОЖЕНИЕ(x,t,r),ДЕЛЕНИЕ(r,2,f); квадр(x,y,z,t)<-ЛИНИЯ(x,y,x,t,1),ЛИНИЯ(x,y,z,y,1),ч2(x,y,z,t); ч2(x,y,z,t)<-ЛИНИЯ(x,t,z,t,1),ЛИНИЯ(z,y,z,t,1); птица(x,y)<-взмах(x,y),птица(x,y); взмах(x,y)<-вниз(x,y,1),вниз(x,y,0),вверх(x,y,1),вверх(x,y,0); вниз(x,y,c)<-сдв(x,y,z,t,u,v),ЛИНИЯ(z,y,u,y,1); вверх(x,y)<-сдв(x,y,z,t,u,v),ЛИНИЯ(x,y,z,t,1),ЛИНИЯ(x,y,u,v,1) ; сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v); сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y); сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y); ?дом(70,110),птица(120,50); как это решать правильно на прологе -д ? ответ напишите на эл.почту |
|
Часовой пояс GMT +4, время: 20:12. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.