ЛАБОРАТОРНАЯ РАБОТА. РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ С ПОМОЩЬЮ ЯЗЫКА VISUAL PROLOG
Декларативный язык Пролог (Программирование в ЛОГике) служит для программирования баз данных, баз знании, семантических сетей, фреймов и экспертных систем. Основу Пролога составляют предикаты первого порядка, организованные в виде фактов и правил.
Поиск решения в Прологе осуществляется с помощью метода резолюции, реализующего обратный вывод. В настоящей работе для создания баз данных и семантических сетей используется одна из наиболее популярных версий Пролога, именуемая как Visual Prolog.4.2.1. СОЗДАНИЕ БАЗ ЗНАНИЙ НА ПРОЛОГЕ
ЛОГИКА ПРЕДИКАТОВ
Предикат P(Xlf Х2, ..., Хп) — это логическая функция п переменных, которая в зависимости от их значений принимает два значения Т (Истина) или F (Ложь). Здесь Р — имя предиката. Значения переменных называются константами или объектами. Одноместный предикат обычно выражает сущность объекта. Рассмотрим простое выражение
Иван — человек,
которое можно классифицировать как
Сущность Объект
человек Иван
и представить в виде предиката
человек(Иван), (4.2.1)
который называется фактом.
Двухместные, трехместные и прочие предикаты выражают отношения между объектами. Начнем с простого высказывания:
Телефон Арбузова имеет номер 72-41-02.
После удаления из него слов имеет, номер получим отношение
Отношение Объект1 Объект2
Телефон Арбузов 72-41-02
образующее двухместный предикат — факт
телефон(Арбузов,72-41-02) .
Совокупность такого рода фактов называется базой знаний (БЗ), которую будем именовать «телефонным справочником».
телефон(Арбузов,72-41-02) .
телефон(Иванов,74-11-93) .
телефон(Артемов,41-97-44) .
телефон(Бабкина,72-41-41) . (4.2.2)
телефон(Воржев,77-06-18) .
телефон(Гуляев,72-41-73) .
телефон(Деев,77-22-19) .
телефон(Еремина,72-40-24) .
Другому, близкому по смыслу выражению некто(X) — человек
соответствует следующая предикатная форма:
человек(X),
где X — переменная, обозначающая имя человека.
Теперь запишем известное выражение
Человек смертен
в эквивалентной форме
Если некто(X) — человек,
то некто(X) смертен (4.2.3)
выделим в нем предикаты человек (X) , смертен (X) и
представим в виде импликации
Например, рассмотрим простое предложение Петя находится на речке
и сложное предложение
Ваня всегда находится там же,
где и Петя. (4.2.5)
В предложении (4.2.5) объекты Петя и речка связаны отношением находится, которое после удаления лишних слов и перестановки будет иметь вид
Отношение Объект 1 0бъект2
находится Петя речка,
что дает возможность записать двухместный предикат — факт
находится(Петя,речка). (4.2.6)
Представим предложение (4.2.5) в эквивалентной форме
Если Петя находится на этом месте,
то Ваня находится на этом же месте. (4.2.7)
Выражение это место означает любое место (X), где может быть Петя и соответственно Ваня. Тогда в предложении можно выделить два двухместных предиката находится(Петя,X) , находится(Ваня,X) и переписать его в виде импликации
находится(Петя,X) —> находится(Ваня,X). (4.2.8)
Следует отметить, что одним из значений X является речка.
Не меняя смысла, предложение (4.2.3) можно перефразировать:
некто(X) смертен, если некто(X) — человек.
и получить по аналогии с (4.2.4) так называемое правило
смертен(X):- человек(X), (4.2.9)
в котором знак импликации (—») заменен знаком (: -), который используется в Прологе. Подобным образом можно
записать правило для высказывания (4.2.7) и его предикатной формы (4.2.8)
находится(Ваня,X)
находится(Петя,X). (4.2.10)
В левой части от знака (: -) находится голова, а в правой — тело правила.
ОСНОВНЫЕ КОНСТРУКЦИИ ЯЗЫКА VISUAL PROLOG
Начнем с описания структуры программы на Visual Prolog, для краткости на Прологе.
В ней можно выделить три обязательных раздела описания и раздел цели (рис. 4.2.1).Раздел domains содержит описания объектов и переменных, называемых доменами. Домены бывают следующих типов:
1) символы (char) — все возможные одиночные символы, заключенные в апострофы: ’ а1, ’Ь',..., ' 3',
2) целые числа (integer) в пределах от -32768 до 32767;
3) действительные числа (real) в пределах от Ю~307 до Ю308;
4) строки (string) — последовательность символов не более 250,например "to day","123".
5) символьные имена (symbol) — последовательность строчных английских букв (man, ab, cd), цифр и подчеркиваний или последовательность любых символов (не более 250), заключенная в кавычки, например "лодка", "Star", "Иван да Марья".
Раздел predicates служит для описания используемых предикатов.
В разделе clauses находятся факты и правила, известные заранее.
В разделе goal формируются одна или несколько целей.
Пролог обеспечивает возможность включения в любое место программы комментариев, заключенных между символами /* и */.
Теперь опишем переменные или объекты, называемые доменами и используемые в предикатах. Имя предиката и его аргументы записываются строчными буквами или именами на английском языке. Переменные записываются прописными буквами (X) или символьными именами (List), начинающимися с большой буквы, на английском языке. Вначале составим программу на Прологе (рис. 4.2.2), описывающую факты БЗ (4.2.2).
Алгоритм решения, реализованный на Прологе, базируется на известном правиле резолюций. Решение состоит в доказательстве истинности заключения или цели goal, которой может быть нахождение:
1) номера (X) телефона Иванова — tel ( "Иванов" ,X) ;
2) владельца (Y) телефона с номером 72-41-41 — tel(Y,"72-41-41").
Здесь X, Y — переменные, значения которых требуется определить; "Иванов", "72-41-41" — константы или заранее заданные значения переменных. Переменные обычно обозначаются прописными буквами.
Теперь опишем алгоритм решения, реализованный в Прологе.
Последовательно просматриваются факты и сопоставляются с целью 1. Процедура сопоставления цели с
Г----------------------------------------------------- domains | ||
vlad,nom tel = symbol predicates tel(vlad,nom tel) clauses tel("Арбузов","72-41-02") . | %Факт | 1 |
tel("Иванов","74-11-93") . | %Факт | 2 |
tel("Артемов","41-97-44") . | %Факт | 3 |
tel("Бабкина","72-41-41") . | %Факт | 4 |
tel("Воржев","77-06-18") . | %Факт | 5 |
tel("Гуляев","72-41-73"). | %Факт | 6 |
tel("Деев","77-22-19") . | %Факт | 7 |
tel("Еремина","72-40-24") . i_ | %Факт | 8 |
первым фактом выглядит так. Вначале сравниваются предикаты цели и факта 1. Если они имеют одинаковые имена, то сравниваются соответствующие аргументы. Первым аргументом цели является константа "Иванов ", а факта 1 — константа "Арбузов".
Сопоставление считается неуспешным (константы "Иванов" и "Арбузов" различаются) и осуществляется переход к следующему факту 2. Успешным будет сопоставление цели 1 и факта 2, поскольку первые аргументы в цели и факте одинаковы. Цель 1 доказана, ответом будет конкретизация X = 74-11-93.Для цели 2 успешным будет сопоставление с фактом 4, у которого второй аргумент — константа совпадает с аналогичным в цели. В результате переменная Y приобретает значение"Бабкина".
Ответом будет Y = Бабкина.
Рассмотрим на рис. 4.2.3 более сложную Пролог-программу, содержащую факт (4.2.1), правило (4.2.9) и соответственно одноместные предикаты •) —человек(*) и mortal (•) —смертен(*).
Целью может быть вопрос «Иван смертен?», или
mortal("Иван")
Программа работает следующим образом.
Сопоставление предиката цели и первого факта является неуспешным, поскольку различаются имена предикатов.
Предикат цели сопоставим с головой правила mortal (X), в результате чего переменная X в предикатах mortal (X) и men (X) приобретает значение
"Иван". Правило имеет значение Истина или считается завершенным, если все предикаты тела правила сопоставимы с фактами из БЗ. В нашем слу-
чае единственный предикат тела правилаmen ("Иван") сопоставим с аналогичным фактом. Ответом будет Yes (да).
Рис. 4.2.4
По аналогии составлена Пролог-программа (рис. 4.2.4) с фактом (4.2.6), правилом (4.2.10) и двухместным предикатом is (•, •) — находится(*,#).
Здесь паше и site — два аргумента предиката is (паше, site), означающие имя человека и его местонахождение.
Целью поиска может быть вопрос «где находится Ваня?» — is("Ваня",Y).
Отличие этой программы от предшествующей состоит в том, что после удачного сопоставления цели и предиката головы правила, предикат тела правила is ("Петя" , Y) успешно сопоставляется с фактом БЗ is ("Петя", "речка") и Y получает значение "речка", которое передается предикату головы правила is ("Ваня", "речка") .
Ответом будет Y = речка.
Еще по теме ЛАБОРАТОРНАЯ РАБОТА. РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ С ПОМОЩЬЮ ЯЗЫКА VISUAL PROLOG:
- ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ПО РЕШЕНИЮ ПСИХОЛОГО-ПЕДАГОГИЧЕСКИХ ЗАДАЧ
- 7. Каждый школьник – это сложнейший мир проблем и задач. Забота о своевременном решении этих проблем и задач составляет основу строительства новой школы
- ЗАДАЧА: РЕШЕНИЕ
- § 3. СТРУКТУРА РЕШЕНИЯ ПЕДАГОГИЧЕСКИХ ЗАДАЧ
- Психологические особенности решения задач.
- § 3. Мышление, интуиция, воображение в решении задач
- Правило подчинения общения решению задач правового воспитания.
- юридико-психологические исследования решения разных правоохранительных задач
- Прием достижения момента истины в решении задач разговора.
- § 1. ПОНЯТИЕ О ПЕДАГОГИЧЕСКОЙ ДЕЯТЕЛЬНОСТИ КАК ПРОЦЕССЕ НЕПРЕРЫВНОГО РЕШЕНИЯ ПРОФЕССИОНАЛЬНЫХ ЗАДАЧ
- Специфической особенностью творческих процессов решения задач является присутствие в них интуиции.
- Прием создания исходных благоприятных психологический условий для решения задач общения.
- Полное и глубокое изучение следователем и судом психологических особенностей личности обвиняемого способствует решению ряда актуальных задач.
- Глава IV ПСИХОЛОГО-ПЕДАГОГИЧЕСКАЯ ДИАГНОСТИКА ПОСТУПКОВ КАК СОСТАВНАЯ ЧАСТЬ РЕШЕНИЯ ПЕДАГОГИЧЕСКИХ ЗАДАЧ
- Задания по анализу педагогической ситуации и решению заключенных в ней педагогических задач
- СОСТАВЛЯЮЩИЕ ПРОЦЕССА, ОСНОВНЫЕ ЗАДАЧИ И ФОРМЫ РАБОТЫ