Софт-Архив

Visual Prolog Учебник img-1

Visual Prolog Учебник

Рейтинг: 4.0/5.0 (1893 проголосовавших)

Категория: Windows: Прочие языки

Описание

Рекурсивно-логическое программирование

Рекурсивно-логическое программирование

УЧЕБНАЯ ПРОГРАММА ПО ДИСЦИПЛИНЕ

РЕКУРСИВНО–ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Шарапова Л.В.

Для очной формы обучения ВСЕГО 110

семинары 24

Всего аудиторных занятий 54

самостоятельная работа 56

Требования ГОС к обязательному минимуму содержания основной

образовательной программы:

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

Целью изучения дисциплины является изучение основных правил исчисления предикатов; изучение принципов логического программирования; изучения принципов вывода по базе знаний; изучение процедур и директив языка Visual Prolog.

Перечень дисциплин, усвоение которых необходимо для изучения курса: «Информатика», «Математическая логика», «Дискретная математика», «Структуры и алгоритмы компьютерной обработки данных», «Программирование».

В результате изучения дисциплины каждый студент должен:

иметь представление о:

методах обработки данных декларативными языками программирования;

принципах работы логической машины вывода Пролога;

программировать объяснение логического вывода;

программировать интерфейс доступа к базе знаний.

Основные виды занятий: лекции и практические занятия.

Основные виды текущего контроля занятий : коллоквиумы.

Основной вид рубежного контроля знаний : экзамен.

СОДЕРЖАНИЕ КУРСА

Тема 1. Введение.

Задачи и назначение курса. Краткая характеристика языка Пролог. Версии и реализации языка Пролог. Основные сферы применения языка. Альтернативные языки логического программирования.

Тема 2. Логика предикатов первого порядка

Представление объектов в логике предикатов первого порядка. Формулы логики предикатов первого порядка. Проверка общезначимости формулы. Метод резолюций. Этапы приведения формулы к стандартной форме записи. Хорновские дизъюнкты.

Тема 3. Основы языка Пролог

Факты и правила. Предложения. Предикаты. Общие представления о переменных. Цели (запросы) Размещение фактов, правил и запросов.

Комментарии. Сопоставление и унификация. Арифметические вычисления и сравнения. Целочисленная и вещественная арифметика.

Тема 4. Основные механизмы языка Пролог.

Поиск с возвратом. Прерывание поиска с возвратом: отсечение. Детерминизм и отсечение. Управление поиском решений Факты и правила в качестве процедур. Повтор. Использование отката с петлями. Списки и рекурсия. Работа со списками. Использование списков. Хвостовая рекурсия. Принадлежность к списку. Поиск всех решений для цели сразу. Составные списки. Основные предикаты управления строкой. Преобразования типов. Множества.

Тема 5. Основные разделы Пролог-программ.

Раздел предложений. Раздел предикатов. Раздел доменов. Раздел цели. Описание доменов. Задание типов аргументов при декларации предикатов. Арность (размерность). Синтаксис правил. Автоматическое преобразование типов. Простые объекты данных. Составные объекты данных и функторы. Объявление составных доменов. Запись и чтение.

Тема 6. Размещение базы фактов в Прологе.

Работа с файлами. Внутренняя база фактов. Использование внутренних баз фактов. Предикаты обновления внутренней базы фактов

Создание базы данных, располагающейся в оперативной памяти. Размещение базы фактов во внешней памяти. Предикаты загрузки из файла фактов во внутреннюю базу фактов.

Тема 7. Динамические структуры в Прологе.

Деревья (общие сведения). Формирование дерева. Поиск вершины в дереве. Добавление вершины в дерево. Удаление вершины из дерева. Обходы деревьев. Изображение деревьев.

Тема 8. Средства языка

Работа с экспертом приложений. Использование эксперта окон и диалоговых окон. Эксперт панели инструментов. Создание панели инструментов. Управление панелью инструментов. Создание всплывающего меню. Окно изображения, дерева, редактора. Создание диалогового окна. Окна. Типы окон. Стили окон. Создание и уничтожение окон. Обработчики событий. Доступ к различным видам окон. Упорядочивание и обновление окон. Изменение окон. Перерисовка окна, события от таймера и динамический обмен данными.

Тема 9. Создание элементов управления в Visual Prolog.

Элементы управления. События от элементов управления. Статический текст. Командные кнопки. Флажки. Переключатели. Списки. Раскрывающиеся списки. Редактируемые списки. Полосы прокрутки. Специальные элементы управления. Диалоговые окна. Стандартные диалоговые окна. Меню.

Тема 10. Внешние базы данных в Visual Prolog.

Внешние базы данных в Visual Prolog. Цепочки. Домены внешних баз данных. Обработка баз данных. Стандартные предикаты для В+ деревьев. Программирование внешних баз данных. Вывод содержания базы данных. Защита базы данных. Изменение структуры базы данных.

ЛИТЕРАТУРА

И Братко Программирование на языке пролог. Электронный учебник, 2005

А. Адаменко и др. Логическое программирование и Visual Prolog -

Н.И Цуканова, Т.А.Дмитриева, Логическое программирование на языке Visual Prolog, - Горячая линия телеком. 2008

Другие статьи, обзоры программ, новости

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

1. Введение в логическое программирование

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

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

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

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

Таблица 1. Синтаксис логики предикатов

Visual prolog программирование - Образовательный портал и доска объявлений

Логическое программирование и visual prolog

Программа, написанная на языке Prolog, состоит из пяти основных разделов: раздел описания доменов (типов объектов), раздел внутренней базы данных, раздел описания предикатов, раздел описания предложений и раздел описания цели. Ключевые слова domains, facts (database), predicates, clauses и goal отмечают начала соответствующих разделов. Назначение этих разделов таково:

– раздел domains содержит определения доменов, которые описывают различные типы объектов, используемых в программе, если используются только стандартные типы, то раздел может не использоваться;

– раздел facts (database) содержит описание предикатов динамической (внутренней) базы данных, которые являются предикатами базы данных и могут быть изменены в процессе работы программы без перекомпиляции, если программа такой базы данных не требует, то этот раздел может быть опущен;

– раздел predicates служит для описания используемых программой предикатов, этот раздел является обязательным;

– в раздел clauses заносятся правила (факты и предложения) статической базы данных, которая и является собственно программой, этот раздел является обязательным;

– в разделе goal формулируется цель (запрос) созданной программы, составными частями при этом могут являться некие подцели, из которых формируется единая цель программы, этот раздел является обязательным.

При составлении предложений используются связки:

– «если», которая в программе обозначается :- (для совместимости с другими версиями Prolog можно использовать if) и отделяет заголовок предложения от тела ;

– «и», обозначаемая. (синоним and) и разделяющая подцели;

– «или», обозначаемая ; (синоним or) и также используемая для разделения подцелей.

Таким образом, предложение вида

эквивалентно выражению

и читается «А истинен, если истинны B1 и B2 и … Bn или истинны C1 и C2 и … Cn ». При этом A является заголовком предложения, а B1. B2. …, Bn ; С1. С2. … Сm. – телом, составленного из соответствующих подцелей. В конце предложения ставится символ. Факт является частным случаем предложения, у которого пустое тело (или, можно считать, что оно содержит тождественно истинный предикат). Рассмотренный ранее пример 43, иллюстрирует построение некоторой логической программы. В ряде случаев возникает необходимость описать отношения между объектами совокупностью нескольких предложений, заголовок которых содержит один и тот же предикат. Такая совокупность называется процедурой. В Visual Prolog предложения одной и той же процедуры должны следовать друг задругом.

Visual Prolog поддерживает большинство типов данных (в терминах разработчиков Visual Prolog – стандартных доментов), присущих современным языкам программирования

– целые (char, short, integer, unsigned и др.);

– числа с плавающей запятой (real);

– строки, реализованные как нуль-терминальные строки в C (string);

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

– структуры (в терминах Visual Prolog – функторы, что является калькой с английского «functor»).

Имя переменной может состоять из букв, цифр, знаков подчеркивания и должно начинаться с прописной буквы или знака подчеркивания. При этом необходимо помнить, что в теле правила переменные связаны квантором общности. Переменная обозначает объект (как в Common Lisp), а не область памяти. Деструктивное присваивание не поддерживается.

Пример 1. Если четырехугольник является прямоугольником и ромбом, то он – квадрат. Известно, что a прямоугольник, a – ромб. Является ли a квадратом?

ромб(symbol)

прямоугольник(symbol)

квадрат(symbol)

прямоугольник(a ).

квадрат(X):- прямоугольник(X), ромб(X).

квадрат(Y).

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

Функциональные возможности Visual Prolog также сопоставимы с возможностями других языков. Однако в силу своей специфики в Visual Prolog используются не только операции (используется инфиксная форма записи, операции бинарные) и функции (форма записи похожа на форму записи в языках C/C++), но и предикаты. Существует большое количество стандартных (встроенных) функций и предикатов, ниже представлены из некоторые них:

– арифметические операции (+, -, *, /, div, mod);

– операции сравнения (>, >=, <, <=, =, <>);

– математические функции (sin, cos, tan, arctan, exp, ln и др.);

– предикаты управления вычислениями (bound, free, findall, not, fail, true, cut и др.);

– предикаты ввода/вывода (write, writef, read, readline, readterm, nl, openfile, closefile и др).

Особое внимание следует уделить операции =, которая синтаксически эквивалентна операции присваивания в языках C/C++, но «выполняется» иначе. В первую очередь эта операция описывает отношение равенства между объектами – запись вида

A = B – C

описывает отношения между тремя объектами (A, B, C) или двумя (A и B – C). Если переменная A свободна (не конкретизирована некоторым значением), то отношение равенства может быть справедливым после связывания с A значения B – C, что приблизительно соответствует операции присваивания. Но если A конкретизирована, то предикат будет проверять равенство, причем переменные в левой части обязательно должны быть связаны, в противном случае возникнет ошибка.

Пример 2. Используя предикаты bound и free можно построить предикат, который, в зависимости от конкретного состояния переменных, передаваемых ему, будет либо находить сумму, либо разность, либо проверять отношение A = B + C.

sum(A,B,C) :- bound(B), bound(B), A = B + C;

bound(A), bound(B), C = A – B;

bound(A), bound(C), B = A – C.

goal sum(A,2,2) => A = 4

goal sum(5,2,2) => NO

goal sum(5,X,2) => X = 3

Областью действия переменной является одно предложение. В разных предложениях может использоваться одно имя переменной для обозначения разных объектов. Исключение составляет специальный вид переменной – анонимная переменная, которая обозначается _. Каждая анонимная переменная – это отдельный объект. Анонимные переменные используются для обозначения объектов, значения которых не играют роли в данном предложении.

Пример 3. Нахождение большего из двух элементов X и Y, значение которого будет помещаться в переменную Z.[1]

Первый способ:

max(X,Y,Z):- X>Y, Z=X; Y>=X, Z=Y.

Второй способ:

max(X,Y,X):-X>Y. %если X>Y, то 3-й аргумент равен 1-му

max(X,Y,Y):- Y>=X.%иначе 3-й аргумент равен 2-му

Третий способ:

max(X,Y,X):-X>Y. %если X>Y, то 3-й аргумент равен 1-му

max(_,Y,Y). %иначе 3-й аргумент равен 2-му, значение

% 1-го не играет роли

В последнем пример был применен предикат «отсечение» (. синоним cut) – встроенный предикат, который используется для повышения эффективности работы программ. Считается, что выполнение отсечения всегда успешно. Его применение позволяет исключить возможность выбора альтернативных решений для сработавших «левых» подцелей, но никак не влияет на «на правые». Кроме того, отсечение отбрасывает все предложения процедуры, расположенные после предложения, в котором встретилось отсечение.

Логическое программирование позволяет решать задачи, описывая отношения между объектами, фактически, в терминах предметной области. Безусловно, при этом необходимо учитывать синтаксис и семантику языка, но программа в большой степени соответствует исходной формулировке. В ряде случаев, особенно при решении логических задач это оказывается очень удобно [1].

Пример 4. Тони, Майкл и Джон - члены клуба альпинистов. Каждый член клуба или горнолыжник, или скалолаз, или то и другое. Никто из скалолазов не любит дождь. Все горнолыжники любят снег. Майкл любит то, что не любит Тони, и не любит все, что любит Тони. Тони любит снег и дождь. Джон любит снег. Есть ли член клуба, который является скалолазом и не является горнолыжником. И кто он?

клуб(string)

любить(string,string)

не_любить(string,string)

быть(string,string)

любить("Майкл",Погода):-not(любить("Тони",Погода)).

быть(Кто,Кем):-

клуб(Кто),Кем = "Горнолыжник",любить(Кто,"Снег");

клуб(Кто),Кем = "Скалолаз",not(любить(Кто,"Дождь")).

быть(X,"Скалолаз"),not(быть(X,"Горнолыжник")).

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

Пример 5. Определить предикат, вычисляющий факториал.

fact(1,1).% 1! = 1

% иначе если X>0, то F = N! = N*(N-1)! = N*F1

fact(N,F):-X>0, N1=N-1, fact(N1,F1), F=F1*N.

В примере 45 условие X>0 необходимо для того, чтобы остановить рекурсию при поиске решения, альтернативного факту fact(1,1).

Также как и для многих функциональных языков, для языка Prolog актуальна хвостовая рекурсия. Приведение произвольного рекурсивного предиката к хвостовой рекурсии не всегда прямолинейно, но всегда решается за счет введения дополнительных аргументов (пример 46).

Пример 6. Вычисление факториала с использованием хвостовой рекурсии требует вспомогательного предиката четырех аргументов (fact_). Основной предикат (factT) при этом является оберткой.

%рекурсия заканчивается, когда 1-й аргумент равен 3-му,

%при этом значение 2-го связывается с 4-м

fact_(X,Y,X,Y):-!.

fact_(X,Y,X1,Y1):-X2=X1+1, Y2=Y1*X2, fact_(X,Y,X2,Y2).

factT(X,Y):-fact_(X,Y,1,1)

Основной структурой данных, используемой для хранения наборов данных, является список. Принципы работы со списками и их «внешний вид» очень напоминают Common Lisp (а если Prolog-машина реализована на Lisp, являются точно такими же).

Список – это структура данных, определяемая следующим образом:

– пустой список [] – является списком;

– структура вида [H|T] – является списком, если H – первый элемент списка (или несколько, перечисленных через запятую), T – список, состоящий из оставшихся элементов исходного списка, т. е. хвост исходного.

Пример 7. Примеры списков

[1,2,3|X]%первые три элемента заданы явно, переменная X %представляет хвост списка

[[1,2],[3,4],[5,6]]%многоуровневый список

Учитывая, что Visual Prolog типизированный язык, при использовании предикатов, аргументами которых являются списки, необходимо в разделе domains явно определить соответствующий домен списка (в примере 51 определяется список «координат» фигуры). Visual Prolog не предоставляет встроенных предикатов работы со списками, однако их определение не представляет особой сложности.

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

Пример 8. Задача о расстановке ферзей.

point = p(integer,integer)%позиция ферзя – «точка»

points = point*%список точек

generator(integer,points,integer)

Язык программирования ПРОЛОГ

Каймин В.А. Каймин С.В. Уртминцев А.Г.

1. Назначение языка и системы программирования Пролог

Язык Пролог и система программирования Пролог предназначены для практикума по информатике с базами знаний, экспертными системами и изучения элементов матема­тической логики и принципов логического вывода на ЭВМ.

Настоящая версия языка и системы программирования Пролог были созданы в 1989-1991 гг. для поддержки школьного и вузовского практикума по информатике на базе персональных компьютеров IBM PC.

Первая версия интерпретатора Пролога была создана для школьных персональных компьютеров Ямаха в Крыму Серегем Кайминым и Андреем Уртминцевым в августе 1988 г. на языке Паскаль по модели Open Source .

       Данная версия интерпретатора Пролога вместе с базовым пакетом офисных программ поставлялась на всем спектре отечественных школьных ЭВМ и в том числе для отечественных компьютеров модели IBM PC.

       Спецификации настоящей версии языка Пролог были созданы В.А.Кайминым тогда же одновременно со сдачей первого пробного учебника по информатике для средних школ в соавторстве с А.Щеголевым и Д.Боголюбовым (Федюшиным).

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

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

Среди современных систем наиболее широкое распространение через Интернет получили зарубежные интерпретаторы и системы программирования Visual Prolog. GNU Prolog и CWI Prolog.

Система Visual Prolog - наиболее профессиональная коммерческая система логи­ческого программирования. Демонстрационную версию этой системы можно найти и загрузить через Интернет.

Системы GNU Prolog и CWI Prolog - это системы логического программирования Open Source. свободно распространяемые и устанавливаемые на основе генеральной публичной лицензии GNU.

Современные системы программирования на языке Prolog построены на тех же самых базовых принципах логического программирования и математических проце­дурах логического вывода, на которых были основаны и реализованы самые первые отечест­венные системы логического программирования.

2. Описание языка Пролог

2.1. Базовые понятия языка Пролог

Основными понятиями в языке Пролог являются факты, правила и вопросы. Из фактов и правил образуются описания данных, процедур и программы на языке Пролог. Вопросы – это основное средство ведения диалога с базами знаний и программами, имеющимися в памяти ЭВМ.

Факты в Прологе служат для описания конкретных данных и простейших сведений. Примеры фактов:

мам а( зина,Вова )                    – Зина – мама Вовы

пап а( миша,Вова )                   – Миша – папа Вовы

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

Группы фактов могут образовывать данные. Совокупность данных, размещаемых на дисках, образуют базы данных. Общее определение данных в Прологе:

<факт>; [<факт >;. ]

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

родитель( x,y ) ¬ папа( x,y );                     – Родитель – это папа или мама

Основы Пролога Установка и начало работы в Visual Prolog Возможности Visual Prolog Основы языка Visual Prolog Унификация и поиск с возвратом Простые и

Учебные программы по дисциплинам программы профессиональной переподготовки «прикладная информатика в экономике» Основы Пролога.Установка и начало работы в Visual Prolog. Возможности Visual Prolog. Основы языка Visual Prolog. Унификация и поиск с возвратом. Простые и составные объекты. Повтор и рекурсия. Списки и рекурсия. Внутренняя база фактов Visual Prolog. Арифметические вычисления и сравнения. Сложные приемы программирования. Классы и объекты. Запись, чтение и файлы. Обработка строк в Visual Prolog. Внешние базы данных в Visual Prolog. Программирование на системном уровне. Систематический обзор языка Visual Prolog. Интерфейс с другими языками.

3. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ИЗУЧЕНИЮ ДИСЦИПЛИНЫ

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

Охарактеризуйте направление исследований в информатике по искусственному интеллекту.

Что значит понятие «предикат»?

2. Применение интеллектуальных информационных систем

Подготовьте сообщение на тему «Применение интеллектуальных систем в экономике и бизнесе (другой проблемной области)».

Перечислите и охарактеризуйте основные компоненты статических экспертных систем.

Какого профиля специалисты привлекаются для разработки экспертных систем? Каковы их функции?

Отличие динамических экспертных систем от статических?

Характеристика экспертной системы по следующим параметрам: тип приложения, стадии существования, масштаб, тип проблемной среды, тип решаемой задачи.

Основные технологические этапы разработки экспертных систем: идентификация, концептуализация, формализация, выполнение, тестирование, опытная эксплуатация.

Чем отличаются знания от данных? Определения знаний.

Характеристика основных признаков, по которым классифицируются знания (природа знаний, способ приобретения знаний, тип представления знаний).

Логический способ представления знаний. Область применения логической модели.

Продукционная модель представления знаний. Отличия между продукционными системами с прямыми, обратными и двунаправленными выводами?

Что такое перцептрон? Какие модели нейронных сетей вам известны?

Характеристика основных этапов построения нейронной сети.

Основные направления эволюционного моделирования и основные факторы, определяющие неизбежность эволюции.

Основные идеи эволюционного проектирования систем.

Отличие эволюционного синтеза от эволюционных методов оптимизации.

Основные этапы эволюционного синтеза.

Тестовые задания

Задания делятся на 3 типа, перед каждым ответом из предложенного набора стоит один из знаков: ( здесь и далее в скобках показан выбранный вариант ), ( ).

Знак предполагает выбор одного ответа из предложенных.

Знак предполагает выбор нескольких ответов из предложенных.

Знак предполагает указание последовательности или соответствия.

Тестовые задания

1. Генетический алгоритм – это …

моделирование эволюции в живой природе

Основы языка Visual Prolog

Основы языка Visual Prolog

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

Основы языка Visual Prolog

1.1 ПРОграммирование в ЛОГике

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

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

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

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

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

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

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

Машина красивая

Розакрасная

Биллу нравится машина, если машина красивая

likes(Bill, car) if fun(car)

Факты и правила

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

Bill likes dogs.

это предложение устанавливает отношение между объектами Bill и dogs; этим отношением является likes. Правило, определяющее, когда предложение является истинным, может выглядеть так:

Bill likes dogs if the dogs are nice.

Отношение между объектами называется фактом (fact). Факты – это отношения или свойства, о которых известно, что они имеют значение «истина». Отношение состоит из имени отношения и объекта или объектов, заключенных в круглые скобки. Как и предложение, факт заканчивается точкой.

likes(bill, dogs).

Факты помимо отношений могут выражать и свойства:

boy(bill).

gray(dogs).

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

Cindy likes everything that Bill likes.

По этому правилу получается, что

Cindy likes dogs.

На Прологе синтаксис у правил будет другим:

likes(cindy, Something) :- likes(bill, Something).

Символ :- имеет смысл «если», и служит для разделения двух частей правила: заголовка и тела. Заголовок - это факт, который был бы истинным, если бы были бы истинными несколько условий. Это называется выводом или зависимым отношением. Тело – это ряд условий, которые должны быть истинными, чтобы Пролог мог доказать, что заголовок правила истинен.

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

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

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

likes(bill, dogs).

likes(cindy,What).

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

Получив запрос о том, что любит Синди, Пролог ответит:

What = dogs

1 Solutions.

Запросы (цели) могут быть простыми или сложными. Сложными называются цели, состоящие из двух или более частей. А каждая часть сложной цели – подцелью. Возможно использование конъюнктивной и дизъюнктивной формы объединения подцелей. В качестве разделителей используются знаки. и ; соответственно.

Составные цели можно использовать для поиска решения, в котором:

ü обе подцели A и B истинны (конъюнкция), разделяя подцели запятой:

ü истинна либо подцель A, либо подцель B (дизъюнкция), разделяя подцели точкой с запятой.

Переменные.

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

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

Нельзя сохранить информацию, присвоив значение переменной. Переменные используются как часть процесса поиска решения, а не как хранилище информации.

likes(ellen,reading).

likes(john,computers).

likes(john,badminton).

likes(leonard,badminton).

likes(eric,swimming).

likes(eric,reading).

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

Учебник prolog - Скачать Реферат - Реферат

Учебник prolog

1. Создание проекта в VIP

Давайте создадим пустой проект, которому вы затем добавите функциональность.

1.1. Создание нового проекта с графическим интерфейсом пользователя (ГИП)

Этот шаг совершенно прост. Выберите опцию Project/ New на панели задач. Затем заполните диалоговое окно Настройки Проекта. На закладке General

Project Name = prol1

UI Strategy = Object-oriented GUI (pfc/gui)Target Type = Exe

Base Directory = C:\vip6

Sub-Directory = prol1

Linker Name = PDC Linker

DLLs Location = Use … installation Directory

После нажатия кнопки Create у вас появится окно с деревом элементов вашего проекта.

1.2. Компиляция и Исполнение Программы

Для компиляции программы выберите опцию Build/ Build из панели задач. Для исполнения программы выберите Build/ Execute. Появится окновашей программы, с многооконным интерфейсом (как в MS Excel).

ПАКЕТЫ И ФОРМЫ

Добавим в проект из введения функциональности.

2.1. Добавим пакет в дерево проекта

Перед добавлением формы (окна) в проект, давайте создадим папку для него. В дереве проекта выберите корневой пункт ( prol1). Затем выберите опцию File/ New на панели задач. Заполните диалоговое окно Create Project Item:

• Слеваотмечаем пункт Package

• Name = plotter

Остальное оставляем, как есть, нажимаем Create.

2.2. Создадим форму (окно)

В дереве проекта выберите пункт только что созданного пакета ( plotter). Для создания формы, выберите опцию File/ New. Заполните диалоговое окно Create Project Item:

• Слева отмечаем пункт Form

• Name = query

Остальное оставляем, как есть, нажимаем Create.

Затем появится окно FormProperties. Оставьте в нём значения по умолчанию, нажмите OK.

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

2.3. Выбор меню задач

Когда вы запустите пустое приложение, то заметите, что в меню опция File/ New отключена. Для её включения,раскройте ветку TaskWindow в дереве проекта, сделайте двойной клик на пункте TaskMenu. mnu. В нижней части появившегося диалогового окна в ветке & File выберите & New\ tF7. Уберите флажок напротив Disabled.

2.4. В CodeExpert, добавим код для пункта дерева проекта

Для добавления кода к опции File/ New, кликните правой кнопкой мыши на пункте TaskWindow. win. В контекстном меню выберите опцию Code Expert.В диалоговом окне выберите пункт

Menu. TaskMenu. id _ file. id _ file _ new

Сделайте двойной клик. Появится текстовый редактор, со следующим отрезком:

onFileNew(_Source, _MenuTag).

Измените его так :

onFileNew(W, _MenuTag) :- X= query::new(W), X:show().

После этого, можно скомпилировать проект и запустить, нажмите F 9.

СОБЫТИЯ МЫШИ

В двух предыдущих главах, вынаучились строить приложение с формой, которая появляется всякий раз, когда вы выбираете пункт File/ New.

3.1 Добавление кода для MouseDown (нажатие мыши)

Выберите ветку query. frm в дереве проекта, вызовите на ней контекстное меню и выберите эксперта кода. В диалоговом окне выберите ветку Mouse, а в ней onMouseDown. Двойным кликом перейдите к написанию кода. Приведите предложение к такому виду:clauses

onMouseDown(S, Point, _ShiftControlAlt, _Button) :-

W= S:getVPIWindow(),

Point= pnt(X, Y),

vpi::drawText(W, X, Y, "Hello, World!").

Нажмите F9. В вашей программе выберите пункт File/ New, будет создано окно. Кода вы кликаете по окну на нём появляются надписи « Hello World».

3.2. onPaint

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

public abstract void doPaint(java.awt.Graphics g)

Конечно, он может обойти все ограничения, даже в Java. Давайте рассмотрим, как поместить всё.

Задачи Visual Prolog

Задание 3.1

Напишите подходящие определения доменов с помощью основных объектов Visual Prolog. которые могут быть использованы в каталоге музыкальных пьес. Типичное содержимое каталога: Show. West Side Story (Пьеса: Вестсайдская история) Lirics. Stephen Sondheim (Текст: Стефан Сондхейм) Music. Leonard Bernstein (Музыка: Леонард Бернстайн)

Задание 3.2

Измените программу ch06e01.pro так, чтобы предикат country имел 2 характеристики - name (название) и population (население) - и на печать выводились только названия стран, имеющих население более 10 миллионов (1e+7).

Задание 4.1

Запишите предикат с названием sum_of. который работает так же, как length_of. за исключением того, что он работает со списком чисел и суммирует их. Например, целевое утверждение sum_of ([1, 2, 3, 4], S) должно присваивать S значение 10.

Задание 4.2

Добавьте утверждения в разделы domain и predicate программы ch07e06.pro таким образом, чтобы вы могли использовать member для установки принадлежности числа числовому списку.