#логика #prolog
Есть задача:
есть четыре свиньи (а, б, в, г)
они из (австралии, германии, франции, ирландии)
корм (трава, овощи, айца, каштаны)
свинья "б" из германии. австралийская свинья ест овощи. ирландсткая не
любит яйца. свинья "в" ест каштаны, а свинья "a" не из франции и ест
траву.
Откуда какая свинья и что она ест?
Помогите с решением, что-то я туплю.
Ответы
Ответ 1
Подход как решать подобные логические задачи с помощью пролога: Для начала нужно определить факты, которые известны: имя(а). имя(б). имя(в). имя(г). корм(трава). корм(овощи). корм(яйца). корм(каштаны). страна(австралия). страна(германия). страна(франция). страна(ирландия). Далее функция, которая будет решать: solve(Свиньи):- Собираем нужный список, который потом вернем Свиньи = [свинья(А, АСтрана, АКорм), свинья(Б, БСтрана, БКорм), свинья(В, ВСтрана, ВКорм), свинья(Г, ГСтрана, ГКорм)], Указываем, что специфицированные значения должны быть уникальны имя(А), имя(Б), имя(В),имя(Г), unique([А,Б,В,Г]), корм(АКорм), корм(БКорм),корм(ВКорм),корм(ГКорм), unique([АКорм, БКорм, ВКорм,ГКорм]), страна(АСтрана), страна(БСтрана),страна(ВСтрана),страна(ГСтрана), unique([АСтрана, БСтрана, ВСтрана,ГСтрана]), Далее указываем конкретные условия из задачи % свинья "б" из германии. member(свинья(б, германия, _), Свиньи), % австралийская свинья ест овощи. member(свинья(_, австралия, овощи), Свиньи), % свинья "в" ест каштаны, member(свинья(в, _, каштаны), Свиньи), % а свинья "a" не из франции и ест траву. member(свинья(а,НеЛюбитФранцию, трава), Свиньи), not(НеЛюбитФранцию=франция), % ирландская не любит яйца. member(свинья(_, ирландия, НеЛюбитЯйца), Свиньи), not(НеЛюбитЯйца=яйца). Добавляем запускающую функцию, которая вызовет решательную start(Solve):- solve(Solve), Solve = [свинья(а, _, _), свинья(б, _, _), свинья(в, _, _), свинья(г,_,_)]. При запуске start(Решение). получим ответ: Решение = [свинья(а, ирландия, трава), свинья(б, германия, яйца), свинья(в, франция, каштаны), свинья(г, австралия, овощи)] false
Комментариев нет:
Отправить комментарий