Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по ИИС.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.88 Mб
Скачать

Контрольные задания:

Напишите программу, которая передаёт ту же информацию, что и следующие факты и предложения на языке Пролог согласно варианту, выданному преподавателем:

Вариант 1. likes(jeff, painting).

Вариант 2. male(john).

Вариант 3. building("Empire State Building", new_york).

Вариант 4. person(roslin, jeanie, "1429 East Sutter St.","Scotts Valley", "CA", 95066).

Вариант 5. likes(Kate, paint).

Вариант 6. fun(car).

Вариант 7. blue(ball).

Вариант 8. likes(john, smile).

Вариант 9. revise (karmen, Something):- revise (bill, Something).

Вариант 10. Helen likes pizza.

Вариант 11. San Francisco is in California.

Вариант 12. Amy's telephone number is 476-0299.

Вариант 13. Len's father is Alphonso Grenaldi.

Вариант 14. Jon likes angler.

Вариант 15. Karin mail address is 58@mail.ru.

Вариант 16. Len's mather is good cook.

Контрольные вопросы:

  1. Что собой представляет программа, написанная на языке Prolog?

  2. Каким образом Prolog проверяет истинность гипотезы?

  3. Что в первую очередь определяют в Прологе?

  4. Дайте понятие предиката.

  5. Приведите пример предиката.

  6. Что в логическом языке является фактом?

  7. Из чего состоит факт?

  8. Что в логическом языке позволяют выводить правила?

  9. Дайте понятие запроса.

Лабораторная работа №7. Предложения (факты и правила), цели на языке пролог.

Цель работы: подробное рассмотрение предложений (фактов и правил), формирование знаний и представлений о предложениях и целях на языке программирования Пролог, а также соответствующих навыков.

Используемое программное обеспечение: Visual Prolog 5.2.

Теоретические сведения Clauses (условия): Facts (факты) и Rules (правила)

Программа на языке Prolog состоит из предложений, которые можно разделить на две группы: факты (fact) и правила (rule) вывода. Эти фразы известны в Прологе как условия (clauses). Основа программы на Прологе составлена из условий.

О фактах

Факт представляет собой или свойства конкретного объекта, или отношения между некоторыми объектами. Пролог не должен искать или выводить подтверждения факта, он всегда верен, а сам факт может использоваться в дальнейшем как основание для выводов.

О правилах

В Прологе, как в обычной жизни, часто возможно узнать достоверность чего-то, основываясь на других фактах. Согласно конструкции Пролога то, что Вы можете вывести из другой информации является правилом. Правило - это свойство объекта или отношение между объектами, правота которого может быть известна, если известен некоторый набор других объектов. Синтаксически, они отделяются запятыми.

О целях (запросах)

Цель, составленная из двух или более частей, называется составной целью (compound goal), а каждую часть составной цели называют подцелью (subgoal).

Составные цели состоят из конъюнктивных (для их нахождения, необходимо чтобы обе подцели, разделенные запятой, были верны) и дизъюнктивных (хотя бы одна из подцелей должна быть верной, а сами подцели отделяются точкой с запятой) подцелей.

Примеры правил

    1. Первый пример демонстрирует правило, которое определяет подходящие для Дианы пункты меню.

Diane is a vegetarian and eats only what her doctor tells her to eat.

Учитывая меню и предыдущее правило, Вы можете делать вывод, может ли Диана заказать особый пункт из меню или нет. Чтобы сделать это, Вы должны выяснить, соответствует ли пункт из меню, данным ограничениям.

    1. Is Food_on_menu a vegetable?

    2. Is Food_on_menu on the doctor's list?

    3. Conclusion: If both answers are yes, Diane can order Food_on_menu. (заключение: если ответы на оба вопроса положительные, то Диана может заказать еду из меню).

В Прологе, отношения подобно этому должны быть представлены, как правило, потому что заключение основано на фактах. Вот один из способов представления правила:

diane_can_eat(Food_on_menu):-

vegetable(Food_on_menu),

on_doctor_list(Food_on_menu).

Заметьте наличие запятой после vegetable(Food_on_menu). Запятая выражает объединение нескольких задач, и обычно читается как "and"; vegetable(Food_on_menu) and (и) on_doctor_list(Food_on_menu) должны быть инстинными для того, чтобы

diane_can_eat(Food_on_menu) тоже было правдой.

    1. Предположим, что Вы хотите задать факт Пролога, который является истинным, если Person1 - родитель Person2. Это достаточно легко сделать; просто задайте такой факт Пролога:

parent(paul, samantha).

Здесь показывается, что Пауль является родителем Саманты. Но, предположите, что Ваша база данных уже имеет факты, описывающие отношения отцовства. Например, "Пауль - отец Саманты" ("Paul is the father of Samantha"):

father(paul, samantha).

И Вы также имеете факты, описывающие отношения материнства; "Julie is the mother of Samantha" (Джулия – мама Саманты):

mother(julie, samantha).

Если бы Вы уже имелись факты, описывающие эти отношения отца/матери, это была бы пустая трата времени записывать родительские факты в базу данных для каждого из родителей.

Если вы знаете, что Person1 – отец Person2 или если Person1 – мать Person2, то можно сделать заключение, что Person1 – родитель Person2. После постановке этих условий на естественном языке, должно быть довольно просто перевести это в правило Пролога.

parent(Person1, Person2):- father(Person1, Person2).

parent(Person1, Person2):- mother(Person1, Person2).

Эти правила означают:

Person1 is the parent of Person2 if Person1 is the father of Person2.

Person1 is the parent of Person2 if Person1 is the mother of Person2.

    1. А вот другой пример:

A person can buy a car if the person likes the car and the car is for sale (Человек может купить машину, если она ему нравится и если она продается).

Эти отношения могут быть представлены в Прологе с помощью следующего правила:

can_buy(Name, Model):- person(Name), car(Model), likes(Name, Model), for_sale(Model).

Эти правила описывают следующие отношения:

Name can_buy Model if (Name может купить машину если)

Name is a person and (Name это человек)

Model is a car and (Model это машина)

Name likes Model and (Name нравится данная Model)

Model is for sale (Model продается).

Это правило Пролога будет верным, если будут выполнены все условия в теле правила.

Для подробного изучения предложений рассмотрим пример для покупки автомобиля:

  1. Запустите файл «Noname.pro».

  2. Напишите нижеприведенный текст программы:

PREDICATES

nondeterm can_buy(symbol, symbol)

nondeterm person(symbol)

nondeterm car(symbol)

likes(symbol, symbol)

for_sale(symbol)

CLAUSES

can_buy(X, Y):- person(X),

car(Y),

likes(X, Y),

for_sale(Y).

person(kelly).

person(judy).

person(ellen).

person(mark).

car(lemon).

car(hot_rod).

likes(kelly, hot_rod).

likes(judy, pizza).

likes(ellen, tennis).

likes(mark, tennis).

for_sale(pizza).

for_sale(lemon).

for_sale(hot_rod).

Для того чтобы узнать:

  • Кто что может купить?

  • Что Джуди и Келли могут купить?

  • Кто может купить машину «hot rod»?

можно попробовать задать следующие цели:

can_buy(Who, What).

can_buy(judy, What).

can_buy(kelly, What).

can_buy(Who, hot_rod).

  1. Пропишите цель в разделе GOAL:

can_buy(Who, What).

Пролог ответит (рис.1):

Рис. 1. Вывод результата цели1

«Who=kelly, What=hot_rod» (Кто - Келли, что любит - hot_rod)

«1 Solution» (Одно решение)

  1. Перед запросом can_buy(Who, What) поставьте знак «%» - так в Visual Prolog выделяется комментарий, другой способ – /* - в начале и конце */.

/* Это пример комментария*/

  1. Напишите следующую цель:

can_buy(judy, What).

Пролог выдаст сообщение (рис. 2):

Р ис. 2. Вывод результата цели2

  1. Пропишите следующую цель:

can_buy(kelly, What).

Пролог выдаст сообщение (рис.3):

Р ис. 3. Вывод результата цели3

  1. Следующую цель:

can_buy(Who, hot_rod).

Пролог выдаст сообщение (рис. 4):

Рис. 4. Вывод результата цели4

Цели (запросы)

Цели могут быть простыми, как эти две:

likes(ellen, swimming).

likes(bill, What).

или же более сложные: цели, состоящие из двух частей:

likes(Person, reading), likes(Person, swimming).

Составные цели

1. Напишите следующий программный код:

PREDICATES

car(symbol, long, integer, symbol, long)

truck(symbol, long, integer, symbol, long)

nondeterm vehicle(symbol, long, integer, symbol, long)

CLAUSES

car(chrysler, 130000, 3, red, 12000).

car(ford, 90000, 4, gray, 25000).

car(datsun, 8000, 1, red, 30000).

truck(ford, 80000, 6, blue, 8000).

truck(datsun, 50000, 5, orange, 20000).

truck(toyota, 25000, 2, black, 25000).

vehicle(Make, Odometer, Age, Color, Price):-

car(Make, Odometer, Age, Color, Price);

truck(Make, Odometer, Age, Color, Price).

2. Попробуйте следующую цель, затем запустите программу.

GOAL

car(Make, Odometer, Age, Color, 25000).

Здесь цель задается найти автомобиль, описанный в разделе предложений, который стоит точно 25 000 $. На что Пролог выдаст следующий ответ (рис. 5):

Р ис. 5. Результат цели1

Но эта цель немного неестественна, если задать вопрос:

Is there a car listed that costs less than $25 000 (Есть ли машины, стоящие меньше 25 000 $)?

Вы можете организовать Visual Prolog для поиска решения, задав следующую составную цель:

  1. Измените цель на нижеприведенную. Не забудьте в разделе предикатов задать множество решений для данного предиката.

car(Make, Odometer, Age, Color, Cost), Cost < 25000.

  1. Протестируйте новую цель и Пролог выдаст Вам ответ (рис. 6):

Рис. 6. Вывод результата цели2

В данном примере представлены конъюнктивные подцели. Для выполнения этой составной цели, Пролог будет пробовать решить каждую подцель по порядку. Сначала первую -

car(Make, Odometer, Age, Color, Cost),

а потом вторую -

Cost < 25000

с переменной Cost, имеющей одно и то же значение в обеих подцелях.

Замечание: Подцель Cost < 25000 использует отношение меньше чем (<), которое уже встроено в систему Visual Prolog. Отношение меньше чем не отличается от других отношений, характеризующих отношение двух числовых объектов, но просто более удобно использовать «<».

Теперь попробуем увидеть, является ли следующее выражение на естественном языке правдой

Is there a car listed that costs less than $25 000? or is there a truck listed that costs less than $20 000?

Для этого используем составную цель, включающую дизъюнктивные подцели.

  1. Добавьте ещё одну цель к той, которая уже имеется.

truck(Make, Odometer, Age, Color, Cost), Cost < 20000.

Пролог выдаст 2 решения (рис. 7):

Рис. 7. Результат цели3

Здесь эти две подцели устанавливаются как альтернативы, больше того так если бы они были двумя предложениями для одного правила. Пролог тогда найдет решение, которое удовлетворяет любую из подцелей. Чтобы решить эту составную цель, Пролог будет пробовать решить первую подцель нахождения автомобиля, стоящего меньше 25000, которая в свою очередь состоит тоже из двух подцелей:

car(Make, Odometer, Age, Color, Cost) и Cost < 25000.

Если автомобиль найден, цель выполнена; в противном случае Пролог будет пробовать выполнить вторую составную цель нахождения грузовика, стоящего меньше 20000, состоящую тоже из двух подцелей:

truck(Make, Odometer, Age, Color, Cost) и Cost < 20000.

Контрольное задание:

  1. Напишите программу на языке Пролог с использованием целей согласно варианту, выданному преподавателем:

Вариант 1. Есть ли пылесосы, которые стоят меньше 10000?

Вариант 2. Найти ноутбук, который стоит 50000.

Вариант 3. Найти платье за 5000 и костюм, стоящий меньше 5000.

Вариант 4. Есть ли телефоны, стоящие более 30000?

Вариант 5. Найти пылесосы, которые стоят 7000.

Вариант 6. Найти ноутбук, который стоит меньше 50000.

Вариант 7. Найти конфеты, стоящие меньше 100 рублей, и шоколад, который стоит больше 30 рублей.

Вариант 8. Есть ли телефоны Sony Ericsson за 15000?

Вариант 9. Найти студентов, которым меньше 22 и больше 22 лет.

  1. Перепишите следующие правила, сформулированные на языке Пролог, на естественном языке согласно варианту, выданному преподавателем:

Вариант 1. eats(Who, What):- food(What), likes(Who, What).

Вариант 2. pass_class(Who):- did_homework(Who), good_attendance(Who).

Вариант 3. does_not_eat(toby, Stuff):- food(Stuff), greasy(Stuff).

Вариант 4. owns(Who, What):- bought(Who, What).

Вариант 5. play(Who, What):- football(What), likes(Who, What).

  1. Напишите правила на языке Пролог, которые передают значение этих предложений согласно варианту выданному преподавателем:

Вариант 1. A person is hungry if that person's stomach is empty.

Вариант 2. Everybody likes a job if it's fun and it pays well.

Вариант 3. Sally likes french fries if they're cooked.

Вариант 4. Everybody owns a car who buys one, pays for it, and keeps it.

Вариант 5. Everybody likes a meal if it's palatable and it tacky.