Язык логического программирования Visual Prolog - Лекция

бесплатно 0
4.5 78
Основы языка Visual Prolog. Введение в логическое программирование. Особенности составления прологов, синтаксис логики предикатов. Программы на Visual Prolog. Унификация и поиск с возвратом. Использование нескольких значений как единого целого.


Аннотация к работе
Билл любит машину, если машина красивая likes (bill, Car) if fun (Car) (Bill likes dogs.) устанавливает отношение между объектами Bill и dogs (Билл и собаки); этим отношением является likes (любит). А теперь перепишем эти же факты, используя синтаксис Пролога: likes(bill, cindy). likes(cindy, bill). likes (bill, dogs). Аргументы - это объекты, которые связываются этим отношением; в факте likes (bill, cindy). отношение likes - это предикат, а объекты bill и cindy - аргументы. Другими словами, правила likes(cindy, Something):-likes (bill, Something). likes(caitlin, Something):-green (Something). означают: "Чтобы доказать, что Синди любит что-то, докажите, что Билл любит это" и "Чтобы доказать, что Кейтлин любит что-то, докажите, что это что-то зеленое".Синтаксис Visual Prolog разработан для того, чтобы отображать знания о свойствах и взаимосвязях.Обычно программа на Visual Prolog состоит из четырех основных программных разделов, к которым относятся: · раздел clauses (предложений); Раздел clauses - это сердце Visual Prolog-программы; именно в этот раздел записываются факты и правила, которыми будет оперировать Visual Prolog, пытаясь разрешить цель программы.В раздел clauses (предложений) помещаются все факты и правила, составляющие программу. Все предложения для каждого конкретного предиката в разделе clauses должны располагаться вместе.Если в разделе clauses программы на Visual Prolog описан собственный предикат, то его необходимо объявить в разделе predicates (предикатов).Объявление предиката начинается с имени этого предиката, за которым идет открывающая (левая) круглая скобка, после чего следует ноль или больше доменов (типов) аргументов предиката: PREDICATENAME (argument_typel OPTIONALNAMEL, argument_type2 OPTIONALNAME2, …, argument_TYPEN OPTIONALNAMEN) После каждого домена (типа) аргумента следует запятая, а после последнего типа аргумента - закрывающая (правая) скобка. Доменами (типами) аргументов предиката могут быть либо стандартные домены, либо домены, объявленные вами в разделе domains. Имя предиката должно начинаться с буквы, за которой может располагаться последовательность букв, цифр и символов подчеркивания.Домены позволяют задавать разные имена различным видам данных, которые, в противном случае, будут выглядеть абсолютно одинаково. В программах Visual Prolog объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные пользователем специальные домены. Во-первых, можно задать доменам осмысленные имена, даже если внутренне эти домены аналогичны уже имеющимся стандартным. Одним из главных преимуществ объявления собственных доменов является то, что Visual Prolog может отслеживать ошибки типов, например, такие: same_sex(X,Y):-person(X, Sex, _), person(Sex, Y, _). Domains product, sum = integer predicates add_em_up(sum,sum,sum) multiply_em(product,product,product) clauses add_em_up(X, Y, Sum):-Sum=X Y. multiply_em(X,Y,Product):-Product=X*Y.Если же какая-то подцель из раздела goal ложна, то считается, что программа завершается неуспешно (хотя чисто внешне никакой разницы в этих случаях нет, - программа просто завершит свою работу). Домен Описание Реализация short Короткое, знаковое, количественное Все платформы 16 бит (-32 768-32 767) ushort Короткое, беззнаковое, количественное Все платформы 16 бит (0-65 535) long Длинное, знаковое, количественное Все платформы 32 бит (-2 147 483 648-2 147 483 647) ulong Длинное, беззнаковое, количественное Все платформы 32 бит (0-4 294 967 295) integer Знаковое, количественное, имеет платформо-зависимый Платформы 1 6 бит (-32 768-32 767) размер Платформы 32 бит (-2 147 483 648-2 147 483 647) unsigned Беззнаковое, количественное, имеет платформо-зависимый размер Платформы 16 бит (0-65 535) Платформы 32 бит (0-4 294 967 295) byte Все платформы 8 бит (0-55) word Все платформы 16 бит (0-65 535) dword Все платформы 32 бит (0-4 294 967 295) Примеры строк: telephone_number "railway ticket" "Dorid Inc" Строки, которые пишутся в программе, могут достигать длины в 255 символов, в то время как строки, которые система Visual Prolog считывает из файла или строит внутри себя, могут достигать (теоретически) до 4 Гбайт на 32-битных платформах symbol Последовательность символов, реализуемых как указатель на вход в таблице идентификаторов, хранящей строки идентификаторов. Для того чтобы объявить person (человек), как предикат с этими тремя аргументами, вы можете разместить в разделе predicates следующую строку: person(symbol, symbol, unsigned). Или, предположим, что вы хотите описать предикат, который сообщал бы позицию буквы в алфавите, т. е. цель alphabet_position(Letter, Position) должна вернуть вам Position = 1, если Letter = a, Position = 2, если Letter = Ь и т. д.Теперь, когда вы ознакомились с такими разделами программ Visual Prolog, как clauses, predicates, domains и goal, поговорим о некоторых других, часто используемых разделах программ: facts, constants и различных глобальны

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

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

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

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

Синтаксис логики предикатов

Предложения на естественном языке Синтаксис логики предикатов

Машина красивая fun (car)

Роза красная red (rose)

Билл любит машину, если машина красивая likes (bill, Car) if fun (Car)

2. Факты

На Прологе описываются объекты (objects) и отношения (relations), а затем описывает правила (rules), при которых эти отношения являются истинными. Например, предложение

Билл любит собак. (Bill likes dogs.) устанавливает отношение между объектами Bill и dogs (Билл и собаки); этим отношением является likes (любит). Ниже представлено правило, определяющее, когда предложение "Билл любит собак" является истинным: Билл любит собак, если собаки хорошие. (Bill likes dogs if the dogs are nice.)

В Прологе отношение между объектами называется фактом (fact). В естественном языке отношение устанавливается в предложении. В логике предикатов, используемой Прологом, отношение соответствует простой фразе (факту), состоящей из имени отношения и объекта или объектов, заключенных в круглые скобки. Как и предложение, факт завершается точкой (.).

Ниже представлено несколько предложений на естественном языке с отношением "любит" (likes): Билл любит Синди. (Bill likes Cindy)

Синди любит Билла. (Cindy likes Bill)

Билл любит собак. (Bill likes dogs)

А теперь перепишем эти же факты, используя синтаксис Пролога: likes(bill, cindy). likes(cindy, bill). likes (bill, dogs).

Факты, помимо отношений, могут выражать и свойства. Так, например, предложения естественного языка "Kermit is green" (Кермит зеленый) и "Caitlin is girl" (Кейтлин - девочка) на Прологе, выражая те же свойства, выглядят следующим образом: green (kermit). girl(caitlin).

3. Предикаты

Отношение в Прологе называется предикатом. Аргументы - это объекты, которые связываются этим отношением; в факте likes (bill, cindy). отношение likes - это предикат, а объекты bill и cindy - аргументы.

Примеры предикатов с различным числом аргументов: pred(integer, symbol) person (last, first, gender) run() birthday(FIRSTNAME, LASTNAME, date)

В примере показано, что предикаты могут вовсе не иметь аргументов.

4. Правила

Правила позволяют вам вывести один факт из других фактов. Другими словами, можно сказать, что правило - это заключение, для которого известно, что оно истинно, если одно или несколько других найденных заключений или фактов являются истинными. Ниже представлены правила, соответствующие связи "любить" (likes): Синди любит все, что любит Билл. (Cindy likes everything that Bill likes)

Кейтлин любит все зеленое. (Caitlin likes everything that is green)

Используя эти правила, вы можете из предыдущих фактов найти некоторые вещи, которые любят Синди и Кейтлин: Синди любит Синди. (Cindy likes Cindy)

Кейтлин любит Кермит. (Caitlin likes Kermit)

Чтобы перевести эти правила на Пролог, вам нужно немного изменить синтаксис: likes(cindy, Something):- likes (bill, Something). ilikes(caitlin, Something):- green (Something) .

Символ :- имеет смысл "если", и служит для разделения двух частей правила: заголовка и тела. Можно рассматривать правило и как процедуру. Другими словами, правила likes(cindy, Something):- likes (bill, Something). likes(caitlin, Something):- green (Something). означают: "Чтобы доказать, что Синди любит что-то, докажите, что Билл любит это" и "Чтобы доказать, что Кейтлин любит что-то, докажите, что это что-то зеленое". С такой "процедурной" точки зрения правила могут "попросить" Пролог выполнить другие действия, отличные от доказательств фактов, например, напечатать что-нибудь.

5. Запросы (Цели)

Описав в Прологе несколько фактов, можно задавать вопросы, касающиеся отношений между ними. Это называется запросом (query) системы языка Пролог. Можно задавать Прологу такие же вопросы, которые мы могли бы задать вам об этих отношениях. Основываясь на известных, заданных ранее фактах и правилах, вы можете ответить на вопросы об этих отношениях, в точности так же это может сделать Пролог. На естественном языке мы спрашиваем: Does Bill like Cindy? (Билл любит Синди?) По правилам Пролога мы спрашиваем: likes(bill, cindy).

Получив такой запрос, Пролог ответит: yes (да) потому что Пролог имеет факт, подтверждающий, что это так. Немного усложнив вопрос, можно спросить на естественном языке: What does Bill like? (Что любит Билл?) По правилам Пролога мы спрашиваем: likes(bill, What).

Необходимо отметить, что второй объект - What -начинается с большой буквы, тогда как первый объект - bill - нет. Это происходит потому, что bill - фиксированный, постоянный объект - известная величина, a What - переменная.

Переменные всегда начинаются с заглавной буквы или символа подчеркивания!

Пролог всегда ищет ответ на запрос, начиная с первого факта, и перебирает все факты, пока они не закончатся. Получив запрос о том, что Билл любит, Пролог ответит: What=cindy

What=dogs

2 Solutions

Так, как ему известно, что likes(bill, cindy). и likes(bill, dogs) .

Если бы мы спросили: What does Cindy like? (Что любит Синди?) likes(cindy, What). то Пролог ответил бы: What = bill

What = cindy

What = dogs

3 solutions поскольку Пролог знает, что Синди любит Билла, и что Синди любит то же, что и Билл, и что Билл любит Синди и собак.

Мы могли бы задать Прологу и другие вопросы, которые можно задать человеку. Но вопросы типа "Какую девушку любит Билл?" не получат решения, т. к. Прологу в данном случае не известны факты о девушке, а он не может вывести заключение, основанное на неизвестных данных: в этом примере мы не дали Прологу какого-нибудь отношения или свойства, чтобы определить, являются ли какие-либо объекты девушками.

6. Размещение фактов, правил и запросов

Предположим, есть следующие факты и правила: Быстрая машина - приятная. (A fast car is fun).

Большая машина - красивая. (A big car is nice).

Маленькая машина - практичная. (A little car is practical).

Биллу нравится машина, если она приятная. (Bill likes a car if the car is fun).

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

Вот пример, демонстрирующий, как Пролог использует правила для ответа на запросы. Посмотрите на факты и правила в этой части программы ch02e01.pro: likes(ellen, tennis). likes (John, football). likes (torn, baseball). likes (eric, swimming). likes (mark, tennis). likes (bill, Activity):- likes (torn, Activity).

Последняя строка в программе является правилом. Это правило соответствует предложению естественного языка: Биллу нравится занятие, если Тому нравится это занятие. (Bill likes an activity if Tom likes that activity)

В данном правиле заголовок - это likes (bill, Activity), а тело - likes (torn, Activity). Заметим, что в этом примере нет фактов о том, что Билл любит бейсбол. Чтобы выяснить, любит ли Билл бейсбол, можно дать Прологу такой запрос: likes (bill, baseball).

Пытаясь отыскать решение по этому запросу, Пролог будет использовать правило: likes(bill, Activity):- likes(torn, Activity).

Загрузите программу ch02e01.pro в среду визуальной разработки Visual Prolog и запустите ее утилитой Test Goal. predicates likes(symbol,symbol) clauses likes(ellen,tennis). likes(John,football). likes(torn,baseball). likes(eric,swimming). likes(mark,tennis). likes(bill,Activity):-likes(torn, Activity). goal likes(bill, baseball).

Утилита Test Goal ответит в окне приложения: yes (да)

Система использовала комбинированное правило likes(bill, Activity):- likes(torn, Activity). с фактом likes(torn, baseball). для решения, что likes(bill, baseball).

Попробуйте также следующий запрос в GOAL-разделе: likes (bill, tennis).

Утилита Test Goal ответит: no (нет) поскольку: · нет фактов, которые говорят, что Билл любит теннис;

· отношение Билла к теннису не может быть логически выведено с использованием данного правила и имеющихся в распоряжении фактов.

Вполне возможно, что Билл любит теннис в реальной жизни, но ответ Visual Prolog основан только на фактах и правилах, которые вы дали ему в тексте программы.
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?