Правило логического вывода на языке Пролог
Результат логического вывода зависит от вида вопроса. Если вопрос не содержит переменных, а только константы, то такой вопрос называется общим и ответ на него будет «да» или «нет» в зависимости от результатов сопоставления с фактами и правилами программы. Если же вопрос содержит переменные, то в процессе сопоставления переменные будут конкретизированы, и полученные значения будут выведены на экран, в противном случае ответ будет «нет». Процесс доказательства правила
<предикат> if <предикат1>, <предикат2>,..., <предикатn>
можно описать следующим образом. 1. Выполняется сопоставление предиката предикат1 с фактами и правилами базы данных. Если сопоставление невозможно, то голова правила — предикат — получает значение «ложь». Если нашелся вариант сопоставления, при котором предикат1 получает значение «истина», то выполняется переход к доказательству предиката предикат2. 2. Выполняется доказательство предиката предикат2 с теми параметрами, при которых был истинен предикат1. Если это возможно, то переход к доказательству предиката предикат3. Если невозможно, то происходит одна из основных операций Пролога — откат, т. е. возврат к предикат1 и поиску других значений параметров предиката предикат1, при которых он будет истинен. Если таковые найдутся, то выполняется возврат к предикат2 и производится попытка его доказательства для новых, альтернативных значений параметров предиката предикат1. Этот процесс выполняется до тех пор, пока не будут просмотрены все варианты доказательства второго предиката. Если при всех возможных вариантах первого предиката второй принимает значение «ложь», то задача считается решенной и голова правила получает значение «ложь». Если найдется вариант сопоставления, при котором и первый, и второй предикаты получают значение «истина», то происходит переход к доказательству предиката предикат3 и т. д. Пример задачи на упорядочение объектов. Рыбак поймал окуня, ерша и щуку. Щуку он поймал раньше окуня, ерша позже щуки, но раньше окуня. Какая рыба поймана раньше всех? Clauses раньше(щука,окунь). раньше(щука,ерш). раньше(ерш,окунь). порядок(X,Y,Z) if раньше(X,Y), раньше(Y,Z). Goal порядок(X,Y,Z). Варианты задания 3
1. Создать БД «ученик» (имя, предмет, балл). Создать правила «хорошист», «отличник», «двоечник». 2. Создать БД «поезд» (пункт отправления, пункт назначения, время в пути, расстояние). Создать правила «пригородный», «дальний», «дневной», «ночной». 3. Создать БД «учитель» (предмет, фамилия, стаж, № школы) и правила «филолог», «естественник», «опытный», «начинающий». 4. Создать БД «дядя—племянник» и «тетя—племянник». Создать правила «кузен», «внучатый племянник». 5. Создать БД «автор» (имя, вид произведения, страна) и правила «писатель», «композитор», «европейский», «азиатский». 6. Создать БД «тетя—племянница», «дядя—племянница» и правила «кузины», «внучатые племянницы». 7. Написать БД «студент» (фамилия, балл1, балл2) и правило «стипендия» (имя, величина).
8. Написать БД «победа» (команда1, команда2) для четырех команд. Создать правило «победитель» (команда 1, команда 2). 9. Создать БД «путь» (пункт1, пункт2) для пяти населенных пунктов и правило «есть путь» (А, В). 10. Создать БД «мать—дочь» и правило «прабабушка». 11. Создать БД «родитель—потомок». Создать правила «сын», «дочь». 12. Создать БД «жильцы» (фамилия, этаж, квартира) и правило «плата за лифт» (X) для жильцов этажей выше третьего. 13. Создать БД «мать—дочь» и «мать—сын». Создать правила «брат» (X, Y) и «сестра» (X, Y). 14. Создать БД «отец—дочь» и «отец—сын» и правило «дедушка» (X, Y). 15. Создать БД: «возраст» (имя, возраст), «мужчина» (X), «женщина» (X) и правило «подлежит призыву» (X). 16. Создать БД «ученик» (имя, предмет, балл). Создать правила 17. Создать БД «поезд» (пункт отправления, пункт назначения, время в пути, расстояние). Создать правила «пригородный», «дальний», «дневной», «ночной». 18. Создать БД «учитель» (предмет, фамилия, стаж, № школы) и правила «филолог», «естественник», «опытный», «начинающий». 19. Создать БД «дядя—племянник» и «тетя—племянник». Создать правила «кузен», «внучатый племянник». 20. Создать БД «автор» (имя, вид произведения, страна) и правила «писатель», «композитор», «европейский», «азиатский». Варианты задания 4 1. Ира и Лена одинакового роста. Лена выше Оли, Таня выше Иры. Кто выше: Таня или Оля? 2. Даны 4 числа X, Y, Z, Т. Известно, что X меньше Y и меньше Т; Y больше Z и больше Т; Z больше X и меньше Т. В каком порядке расположены числа? 3. Возле почты растут 6 деревьев: сосна, береза, липа, тополь, ель и клен. Какое дерево самое высокое и какое самое низкое, если известно, что береза ниже тополя, липа выше клена, сосна ниже ели, липа ниже березы, сосна выше тополя? 4. В очереди за билетами в кино стоят Юра, Миша, Володя, Саша и Олег. Известно, что Юра купил билет раньше Миши, но позже Олега; Володя и Олег не стояли рядом; Саша не находился рядом ни с Олегом, ни с Юрой, ни с Володей. Кто за кем стоит? 5. На улице, встав в кружок, беседуют 4 девочки: Аня, Валя, Галя, Надя. Девочка в зеленом платье — не Аня и не Валя — стоит между девочкой в голубом платье и Валей. Девочка в белом платье стоит между девочкой в розовом платье и Галей. Какого цвета платье у каждой девочки? 6. Трое юношей Коля, Петя, Юра влюблены без взаимности в трех девушек: Таню, Зину, Галю. Кто в кого влюблен, если Коля любит девушку, влюбленную в юношу, который любит Зину; Петя любит девушку, влюбленную в юношу, который любит Галю; Зина не любит Юру. 7. У меня три карандаша: желтый, синий, черный. Можно ли назвать самый короткий и самый длинный в следующих случаях: а) черный короче желтого, желтый короче синего; б) желтый длиннее черного, черный длиннее синего? 8. Создать базу знаний по сказке «Репка». Определить весь ряд персонажей, тянущих репку. Создать вопросы: а) кто первый тянет репку;б) кто тянет после бабки; в) кто на 4 месте? 9. Воробей, дятел и синица сидели на одной ветке. В каком порядке они сидели, если а) синица сидела слева от дятла, а воробей слева от синицы; б) дятел сидел слева от синицы и справа от воробья; в) воробей сидел справа от синицы, а дятел справа от воробья? 10. Береза выше рябины, но ниже тополя. Что выше: рябина или тополь. Какое дерево самое низкое? 11. Назовите имена самого высокого, среднего и самого низкого среди мальчиков, если а) Вася ниже Коли, Коля ниже Толи; б) Вася ниже Толи, Толя выше Коли. 12. О четырех числах X, Y, Z, Т известно, что Y меньше X и меньше Т, X больше Z и больше Т, Z больше Y и меньше T. Какое число самое маленькое и какое — самое большое? 13. Ира и Лена одинакового роста. Лена выше Оли, Таня выше Иры. Кто выше: Таня или Оля? 14. Даны 4 числа X, Y, Z, Т. Известно, что X меньше Y и меньше Т; Y больше Z и больше Т; Z больше X и меньше Т. В каком порядке расположены числа? 15. Возле почты растут 6 деревьев: сосна, береза, липа, тополь, ель и клен. Какое дерево самое высокое и какое самое низкое, если известно, что береза ниже тополя, липа выше клена, сосна ниже ели, липа ниже березы, сосна выше тополя? 16. В очереди за билетами в кино стоят Юра, Миша, Володя, Саша и Олег. Известно, что Юра купил билет раньше Миши, но позже Олега; Володя и Олег не стояли рядом; Саша не находился рядом ни с Олегом, ни с Юрой, ни с Володей. Кто за кем стоит? 17. На улице, встав в кружок, беседуют 4 девочки: Аня, Валя, Галя, Надя. Девочка в зеленом платье — не Аня и не Валя — стоит между девочкой в голубом платье и Валей. Девочка в белом платье стоит между девочкой в розовом платье и Галей. Какого цвета платье у каждой девочки? 18. Трое юношей Коля, Петя, Юра влюблены без взаимности в трех девушек: Таню, Зину, Галю. Кто в кого влюблен, если Коля любит девушку, влюбленную в юношу, который любит Зину; Петя любит девушку, влюбленную в юношу, который любит Галю; Зина не любит Юру. 19. У меня три карандаша: желтый, синий, черный. Можно ли назвать самый короткий и самый длинный в следующих случаях: а) черный короче желтого, желтый короче синего; б) желтый длиннее черного, черный длиннее синего? 20. Создать базу знаний по сказке «Репка». Определить весь ряд персонажей, тянущих репку. Создать вопросы: а) кто первый тянет репку;б) кто тянет после бабки; в) кто на 4 месте?
|