Автор работы: Пользователь скрыл имя, 04 Июня 2013 в 13:39, лекция
В начале 70 х годов группа специалистов Марсельского университета во главе с А. Колмероэ разработали специализированную систему для доказательств теорем на базе языка Фортран, которую использовали для обработки высказываний на естественном языке. В начале 80 годов в Отделении Вычислительных наук Датского Технического Университета сформировался коллектив программистов, которым в 1982 году был разработан интерпритатор языка пролог для VAX. В 1984 Лео Йенсен, Джон Гофман, Финн Гронсков разработали компилятор для IBM PC возникла фирма PDC (Prolog Development Center). Фирма Borland до 1990 Turbo Prolog затем права переданы PDC.
1. Основные конструкции языка Visual Prolog, разделы программы, дескриптивный, процедурный и машинный смысл программы на Прологе
2. Представление знаний, структуры данных в программах на языке Пролог.
3. Функциональные возможности Visual Prolog
Тема 3. Язык программирования ПРОЛОГ
Лекция № 2
Язык программирования Visual Prolog
1. Основные конструкции языка Visual Prolog, разделы программы, дескриптивный, процедурный и машинный смысл программы на Прологе
2. Представление знаний, структуры данных в программах на языке Пролог.
3. Функциональные возможности Visual Prolog
1. Основные конструкции языка
Visual Prolog, разделы программы,
Краткая историческая справка:
В начале 70 х годов группа специалистов Марсельского университета во главе с А. Колмероэ разработали специализированную систему для доказательств теорем на базе языка Фортран, которую использовали для обработки высказываний на естественном языке. В начале 80 годов в Отделении Вычислительных наук Датского Технического Университета сформировался коллектив программистов, которым в 1982 году был разработан интерпритатор языка пролог для VAX. В 1984 Лео Йенсен, Джон Гофман, Финн Гронсков разработали компилятор для IBM PC возникла фирма PDC (Prolog Development Center). Фирма Borland до 1990 Turbo Prolog затем права переданы PDC. С 1993 года под руководством Виктора Юхтенко в разработке Visual Prolog принимает участие группа PDC из СПб. Возглавляют проект в настоящее время Лео Йенсен, Томас Линдер Пулс, Виктор Юхтенко, Юрий Ильин.
1. Основные конструкции языка Visual Prolog
Имена
За исключением этих ограничений, вы можете использовать прописные и строчные буквы в программе как угодно. Например, можно сделать имя более читабельным, смешивая большие и маленькие буквы, как в переменной
MyLongestVariableNameSoFar
или используя знаки подчеркивания:
pair_who_might_make_ar_happy_
Компилятор Visual Prolog, кроме как для первой буквы, не делает отличий между прописными и строчными буквами.Это означает, что две переменные
SourceCode и
SOURCECODE
одинаковы.
Ключевые слова
Следующие слова являются зарезервированными и их нельзя использовать как имена, определенные пользователем:
abstract elsedef ifndef
align endclass implement
as enddef include predicates
and erroneous language
class facts multi single
clauses failure nocopy static
constants global nondeterm
database goal object this
determ if or
domains ifdef
Специально определенные предикаты
Следующие предикаты обрабатываются компилятором специальным образом; эти имена нельзя переопределять в программе:
assert |
consult |
msgsend |
term replace |
asserta |
db btrees |
not |
term str |
assertz |
db chains |
readterm |
trap |
bound |
fail |
ref_term ref term |
write |
chain_inserta |
findall |
retract |
writef |
chain_insertafter |
format |
retractall |
|
chain_insertz |
free |
save |
|
chain terms |
magrecv |
term bin |
|
assert |
|
2. Разделы программы
Программа на языке Visual Prolog состоит из модулей, каждый из которых содержит несколько разделов. Раздел программы идентифицируется ключевым словом, как показано в табл. 23.1.
Таблица Содержание разделов
программы
Раздел
Опции компилятора Опции компилятора, заданные в начале модуля
constants Нуль или более символических констант
domains Нуль или более объявлений доменов
facts Нуль или более объявлений предикатов базы данных
predicates Нуль или более объявлений предикатов
goal Цель программы
clauses Нуль или более предложений
class Нуль или более объявлений открытых (и защищенных) предикатов, фактов и доменов
implement Нуль или более объявлений закрытых предикатов, фактов и доменов. Нуль или более предложений, реализующих открытые и закрытые предикаты (и инициализирующих факты)
abstract class Нуль или более объявлений открытых предикатов и доменов. не должны иметь реализацию
Чтобы создать программу, вы должны в ней указать цель. Программе необходимы, по меньшей мере, разделы predicates и clauses. Большинству программ нужен раздел domains для объявления списков, сложных структур и ваших собственных доменов.
При модульном программировании вы можете ставить перед ключевыми словами domains, predicates и facts ключевое слово global, указывая, что последующие объявления имеют глобальную область видимости и объявленные имена действительны во всех программных модулях, которые включают объявления этих глобальных разделов.
Программа может содержать несколько разделов domains, predicates, facts и clauses, а также несколько объявлений и реализаций классов,
• секция объявления объектов предметной области (domains section), которые будут использоваться в логической программе, например:
DOMAINS
title, author = symbol pages = unsigned
секция объявления предикатов (predicates section), которые будут использоваться в логической программе, например:
PREDICATES
book(title, pages) written_by(author, title) long_novel(title)
• секция логических предложений (clauses section), в которой указываются факты и правила, используемые системой Prolog для поиска решений поставленных перед ней задач, например:
CLAUSES
секция цели (goal section), в которой формулируется задача для системы Prolog, например:
GOAL
3. Дескриптивный, процедурный и машинный смысл программы на Прологе.
Обычно программа на Прологе не является последовательностью действий, — она представляет собой набор фактов с правилами, обеспечивающими получение заключений на основе этих фактов. Поэтому Пролог известен как декларативный язык.
Программы на языке Пролог состоят из двух типов фраз: фактов и правил, также называемых предложениями.
2. В Прологе все правила имеют 2 части: заголовок и тело, разделенные специальным знаком : -.
факты и правила— практически одно и то же, кроме того, что факты не имеют явного тела. Факты ведут себя так, как если бы они имели тело, которое всегда истинно.
Пролог всегда ищет решение, начиная с первого факта и/или правила, и просматривает весь список фактов и/или правил до конца.
Механизм логического вывода Пролога берет условия из правила (тело правила) и просматривает список известных фактов и правил, пытаясь удовлетворить условиям. Если все условия истинны, то зависимое отношение (заголовок правила) считается истинным. Если все условия не могут быть согласованы с известными фактами, то правило ничего не выводит.
Пролог базируется на предложениях Хорна, являющихся подмножеством формальной системы, называемой логикой предикатов. Логика предикатов — это простейший способ объяснить, как "работает" мышление, и она проще, чем арифметика, которой вы давно пользуетесь.
Пролог использует упрощенную версию синтаксиса логики предикатов, он прост для понимания и очень близок к естественному языку.
Язык Пролог не предназначен
для программирования задач с
большим количеством арифметиче
+ сложение — вычитание * умножение / деление mod остаток от деления целых чисел div целочисленное деление
Пролог включает механизм вывода, который основан на сопоставлении образцов. С помощью подбора ответов на запросы он извлекает хранящуюся (известную) информацию. Пролог пытается проверить истинность гипотезы (другими словами — ответить на вопрос), запрашивая для этого информацию, о которой уже известно, что она истинна
Одной из важнейших особенностей Пролога является то, что, в дополнение к логическому поиску ответов на поставленные вами вопросы, он может иметь дело с альтернативами и находить все возможные решения. Вместо обычной работы от начала программы до ее конца, Пролог может возвращаться назад и просматривать более одного "пути" при решении всех составляющих задачу частей.
2. Представление знаний, структуры данных в программах на языке Пролог.
Деревья относятся к рекурсивные структурам данных
Тип данных является рекурсивным, если он допускает структуры, содержащие такие же структуры, как и они сами.
Наиболее важным рекурсивным типом данных является список, хотя он и не выглядит непосредственно рекурсивной конструкцией.
Visual Prolog позволяет
определить действительно
domains
treetype = tree(string, treetype, treetype)
Эта декларация говорит о том, что дерево записывается как функтор tree, аргументами которого являются строка и два других дерева.
Внутренняя база фактов (данных)
Внутренняя база фактов состоит из фактов, которые вы можете непосредственно добавлять и удалять из вашей программы на Visual Prolog во время ее исполнения. Вы можете объявлять предикаты, описывающие внутреннюю базу данных в разделе facts программы и применять эти предикаты таким же образом, как используются предикаты, описанные в разделе predicates.
Для добавления новых фактов в базу данных в Visual Prolog используются предикаты assert, asserta, assertz, а предикаты retract и retractall служат для удаления существующих фактов. Вы можете изменить содержание вашей базы фактов, сначала удалив факт, а потом вставив новую версию этого факта (или совершенно другой факт). Предикаты consult/1 и consult/2 считывают факты из файла и добавляют их к внутренней базе данных, a save/1 и save/2 сохраняют содержимое внутренней базы фактов в файле.
Visual Prolog интерпретирует факты, принадлежащие к базе данных, таким же образом, как обычные предикаты. Факты предикатов внутренней базы фактов хранятся в таблице, которую можно легко изменять, тогда как обычные предикаты для достижения максимальной скорости компилируются в двоичный код.
Ключевое слово facts (это синоним устаревшего слова database) определяет начало объявления раздела facts
Внешние базы данных в Visual Prolog
Система внутренних баз данных Visual Prolog, использующая предикаты asserta, assertz, retract и retractall, является простой и удобной. Однако она уступает в скорости работы с большими базами данных, отчасти из-за этих соображений была создана система внешних баз данных, с помощью которой можно, например, создать:
- систему управления запасами с большим количеством записей;
- экспертную
систему со многими
- учетную
систему для запоминания
- пользовательскую базу, в которой данные связаны не реляционным путем.
Списки и рекурсия
Обработка списков, т. е. объектов, которые содержат произвольное число элементов — мощное средство Пролога. В этой главе объясняется, что такое списки и как их объявлять. Затем приводится несколько примеров, в которых показано, как можно использовать обработку списков в задачах. Далее определяются два известных предиката Пролога — member (член) и append (объединение) при рассмотрении процедурных и рекурсивных аспектов обработки списков.
После этого определяется стандартный предикат Visual Prolog — findall, который дает возможность находить и собирать все решения для одной цели.