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

Автор работы: Пользователь скрыл имя, 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

Вложенные файлы: 1 файл

Lekc2ozo (1).doc

— 119.00 Кб (Скачать файл)


Тема 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

 

Имена

    1. В Прологе, напомним, имена используются для обозначения символических констант, доменов, предикатов и переменных. Имя состоит из буквы (или знака подчеркивания), за которой следует любая комбинация нуля или более букв, цифр или знаков подчеркивания. На имя накладываются два важных ограничения:
    2. О имена символических констант должны начинаться со строчной буквы;
    3. имена переменных должны начинаться с прописной буквы или знака подчеркивания.

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

MyLongestVariableNameSoFar

или используя знаки  подчеркивания:

pair_who_might_make_ar_happy_couple (henry_yiii,   ann_boleyn)

Компилятор Visual Prolog, кроме  как для первой буквы, не делает отличий  между прописными и строчными  буквами.Это означает, что две  переменные

SourceCode и

SOURCECODE

одинаковы.

Ключевые слова

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

abstract elsedef ifndef procedure

align endclass implement protected

as enddef include predicates

and erroneous language reference

class facts                  multi single

clauses failure nocopy static

constants global nondeterm struct

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. Представление знаний, структуры данных в программах на языке Пролог.

 

  1. Представление знаний о предметной области в виде фактов и правил базы знаний Пролога.
  2. структуры данных в программах на Прологе.

 

 

  1. Представление знаний о предметной области в виде фактов и правил базы знаний Пролога.

 

Деревья относятся  к рекурсивные структурам данных

Тип данных является рекурсивным, если он допускает структуры, содержащие такие же структуры, как  и они сами.

Наиболее  важным рекурсивным типом данных является список, хотя он и не выглядит непосредственно рекурсивной конструкцией.

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, является простой и удобной. Однако она уступает в скорости работы с большими базами данных, отчасти из-за этих соображений была создана система внешних баз данных, с помощью которой можно, например, создать:

- систему  управления запасами с большим  количеством записей;

-  экспертную  систему со многими отношениями  и небольшим количеством записей сложной структуры;

- учетную  систему для запоминания больших  текстов в базе данных;

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

 

 

  1. структуры данных в программах на Прологе

Списки и  рекурсия

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

После этого определяется стандартный предикат Visual Prolog — findall, который дает возможность находить и собирать все решения для одной цели.

Информация о работе Язык программирования Visual Prolog