WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 || 3 | 4 |   ...   | 5 |

ных, что это позволило значительно ускорить трансляцию и вы- Вариант Personal Edition предназначен для некоммерческого полнение программ. использования, и сообщения об этом постоянно имеются во всех В 1996 г. Prolog Development Center выпускает на рынок приложениях, созданных с его помощью.

систему Visual Prolog 4.0. В этой работе участвовали российские Все продукты PDC, включая Visual Prolog, – это системы, программисты под руководством Виктора Юхтенко, который порождающие исполняемый код (EXE или DLL), что еще раз подпозже стал техническим директором компании "Пролог-Софт", тверждает высокую эффективность Пролога.

представляющей интересы PDC в России.

В Visual Prolog входят: интерактивная среда визуальной разработки (VDE – Visual Develop Environment), которая включает текстовый и различные графические редакторы, инструментальные средства генерации кода, конструирующие управляющую логику (Experts), а также интерфейс визуального программирования VPI (Visual Programming Interface), Пролог-компилятор, набор различных подключаемых файлов и библиотек, редактор связей, файлы, содержащие примеры и помощь.

Visual Prolog – многоплатформенная среда программирования, позволяющая разрабатывать приложения, работающие под управлением различных операционных систем – MS-DOS, PharLap-Extended DOS, всеми версиями Windows, 16- и 32-битовыми платформами OS/2, UNIX. Ресурсы и инструментальные средства (окна, меню, диалоги, органы управления, перья, кисти, курсоры мыши, графические курсоры, рисунки и т. п.), представляются в виде несложных Пролог-структур.

В декабре 1997 г. фирма PDC выпустила Visual Prolog 5.0, с января 1999 г. приступила к распространению версии 5.1. В настоящее время все желающие могут бесплатно скопировать через Internet последнюю версию системы Visual Prolog 5.2 Personal Edition, функционирующую в средах Windows 3.1/95/98, NT, OS/2, Судя по последним данным, PDC Prolog v.5.2. Rersonal Edition более официально свободно не распространяется. Думаю, ее можно найти на других сайтах Интернета.

11 – если переменным в обоих термах можно присвоить в каче2. Синтаксис и семантика Пролог-программ стве значений объекты таким образом, что после подстановки они станут идентичными.

2.1. Объекты данныхНапример, date(Day,июнь,1999) и date(Day1,июнь,1999) соОбъекты данных в Прологе могут быть простыми данными поставимы, поскольку переменным Day и Day1 можно присвоить и структурами. Простые данные могут быть константами и переодинаковые значения от 1 до 31. Сопоставление – процесс проверменными. Константы могут быть атомами, числами и строками.

ки сопоставимости термов.

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

2.2. Декларативный смысл Пролог-программ Дано предложение:

Атомы P:-Q,R.

Атом – комбинация букв, цифр и знака подчеркивания, наQ и R имеют синтаксис термов.

чинающаяся со строчной буквы. Примеры: a, "это_атом", "this_is_atom".

Возможные способы декларативной интерпретации этого предложения:

Переменные P истинно, если Q и R истинны.

Переменная – комбинация букв, цифр и знака подчеркиваИз Q и R следует P.

ния, начинающаяся с прописной буквы. Примеры: V, Это_переменная25.

Два варианта процедурного прочтения:

Чтобы решить задачу P нужно сначала решить подзадачу Q, Структуры а затем – подзадачу R.

Структурные объекты (или просто структуры) – это объекЧтобы достичь P, сначала достигни Q, затем достигни R.

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

дурным прочтениями заключается в том, что последнее не только date(17,июнь,1999) % date – функтор.

определяет логические связи между левой и правой (цели) частяdate(День,июнь,1999), здесь – День – переменная, которая ми предложения, но еще и порядок, в котором эти цели обрабатыможет получить значение (стать связанной переменной) на ком-то ваются.

этапе вычислений. Синтаксически все объекты данных в Прологе Декларативный смысл программы определяет, является ли есть термы.

данная цель истинной, и, если да, то при каких значениях переСопоставление.

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

результат подстановки в него на место каждой переменной некоДва терма сопоставимы:

торого терма. Вариантом предложения C называется такая конкре– если они идентичны, тизация C, при которой каждая переменная заменена на другую переменную.

Например:

читатель(X):- иметь_книгу(X,Y) Излагается по [2, 8] 13 Два варианта:

• Примеры: синий(шар), красный(платок,флаг,яблоко), лючитатель(X1):- иметь_книгу(X1,Y2) бит(Cаша,Некто).

читатель(Beta):- иметь_книгу(Beta,Alpha) • Предикат – символическое имя отношения, за которым следуют аргументы в скобках (через запятую) Конкретизации:

• Факт – отношение, в котором все объекты известны; факчитатель(Колмогоров):- иметь_книгу(Колмогоров,Z) ты всегда истинны. Факты можно рассматривать как аксиомы.

читатель(Васильев):- иметь_книгу(Васильев, Овод) • Предложение – запись на Прологе отдельных отношений.

• Правило – предложение с логической связкой если (if,:-).

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



Прологе возможна и дизъюнкция целей: должна быть истинной, ходить(Гена,пляж):-день(солнечный) по крайней мере, одна из целей. Дизъюнкция обозначается точкой ходить(Гена,пляж) if день(солнечный) с запятой (;):

Левая часть правила называется заголовком, правая – телом.

P:-Q;R. %P истинно, если истинно Q или P.

• Процедура – последовательность предложений, описыТо же самое можно написать в виде двух правил Пролога:

вающих предикат.

P:-Q.

Переменные позволяют формулировать отношения и правиP:-R.

ла общего вида и, таким образом, формулировать вопросы. ПереЗапятая связывает цели сильнее (имеет более высокий применные должны получить значения в результате операций сопосоритет), чем точка с запятой. Предложение тавления и конкретизации. До этого переменная называется своP:-Q,R;S,T,U.

бодной, после – связанной.

понимается как Имя переменной должно начинаться с прописной буквы или P:-(Q,R);(S,T,U).

знака подчеркивания (_). Далее может следовать любое число букв (в любом регистре), цифр или знаков подчеркивания.

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

вычисления списка целей.

• Цель – более общее наименование запроса. Пролог пытается разрешить цель, просматривая все факты. Разрешение цели 2.3. Основные определения эквивалентно доказательству теоремы на основе аксиом – фактов.

• Пролог – «декларативный язык, программы на котором содержат объявления логических взаимосвязей, необходимых для решения задачи» [6].

• Отношение между объектами задается в форме предиката:

"имя_отношения(<имена_объектов>)".

15 6. После того как вы написали текст программы, откомпи3. Практическое программирование на Прологе лируйте ваш основной файл ("<имя_проекта>.pro"). Для этого воспользуйтесь либо Ctrl-F9, либо соответствующей Лучший известный мне учебник по программированию на позицией в меню Projec. Если есть ошибки, появится соTurbo Prologe, переведенный на русский язык, – это уже цитироответствующее окно с сообщениями. Установите курсор ванная книга "Использование Турбо-Пролога" [7]. В ней есть все, на сообщение и нажмите Enter (либо двойное нажатие леза исключением использования системы управления внешней "бивой клавишей мышки), и вы окажетесь в исходном модуле нарной" БД. Наиболее полное руководство на русском языке по в позиции ошибки.

логическому программированию и Visual Prolog'у вышло в 2003 г.

7. Устранив ошибки, выберите позицию Rebuild All или на[8].

жмите сочетание клавиш Ctrl-Alt-F9 для получения исИсходные модули, написанные на Turbo Prolog’е, могут полняемого файла.

быть включены и в состав приложений Visual Prolog’а. Полный комплект документации на английском языке можно получить в В следующем разделе приведены самые необходимые свесоставе Visual Prolog v. 5.2 Personal Edition. Она содержит также дения и примеры, для того чтобы понять специфику Пролога и удобную и полную Help-систему.

начать писать программы. Тема работы с внешней ("бинарной") Изучение версии 5.2. визуального пролога рекомендую набазой данных Пролога не затрагивается.

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

В общем случае программа на Прологе состоит из следую1. В общем меню выбираете Projec. Затем New Project. Появщих секций (или разделов):

ляется меню Эксперта приложения (Application Axpert). В CONSTANTS /* раздел определения констант */ этом меню в подменю GENERAL (оно уже выбрано) пеconst1 = definition чатаете наименование проекта и имя файла-проекта (VPRconst2 = definition файла). Печатаете или выбираете директорию проекта.

2. Выбираете подменю TARGET. В позиции UI Strategy за%Пример:

меняете VPI на EASYWIN.

str_main = "Это строка" 3. Нажимаете кнопку Create. Создаются все необходимые файлы. В настоящий момент вас интересуют только два [GLOBAL] DOMAINS /*раздел определения структур даниз них – файлы с расширениями.pro и pre. Последний со- ных*/ держит секции GLOBAL DOMAINS и GLOBAL dom[,dom] = [reference]declaration1;declarationDATABASE.

4. Напишите в этих секциях необходимые определения, не Примеры:

убирая уже имеющийся текст. Файл с расширением.pro listdom = dom* /*определение списка целых чисел*/ содержит секции predicates, goal, clauses.

dom, nb_jbject = integer 5. Пишите необходимый код. Можно редактировать вообще compaund_dom = cmpd(dom,string,symbol,name) вне системы. Для вызова системы установите курсор на name = string файл с раширением.vpr и нажмите Enter.

file = inputfile;outputfile 17 [GLOBAL]DATABASE[-]/*раздел определе- %Пример1: Только конъюнкция ния данных, хранящихся в оперативной памяти*/ edit_3(InpStr1,InpStr2,OutStr):- [determ] pred1(....) concat(InpStr1,InpStr2,InpStr), pred2(.....) edit(InpStr,OutStr).

%Пример: %Пример2: Конъюнкция и дизъюнкция term(integer,string,real,name) edit_3(InpStr1,InpStr2,OutStr):- InpStr2<>"Не присоединять",!, GLOBAL PREDICATES /* раздел объявления глобальных concat(InpStr1,InpStr2,InpStr), "процедур"*/ edit(InpStr,OutStr);





[determ|nondeterm] pred1(.........) -(i,i,o,..)(i,o,i,..)[language !,edit(InpStr1,OutStr);

c|pascal|fortran] [ as "name" ] pred2(........) include "filename" % включение файла во время компиляции %Пример: Пример:

main_calc(integer,real,real,string) – (i,i,i,o) include "modul1.pro" my_predict make_NewString(string,string,string) – (i,i,o) Отметим, что Turbo Prolog располагает достаточной для ре шения большинства задач библиотекой математических функций.

PREDICATES /* раздел объявления локальных "процедур"*/ [determ|nondeterm] pred1(.........) 3.2. Свободные и связанные переменные pred2(........) Вызывая некоторый предикат с N переменными, части из них вы можете задать значения, другим – нет. Первые – это пара%Пример:

метры, или связанные переменные, последние – свободные переcalc2(integer,real,real,string) менные, которые в процессе вычисления должны получить значеnondeterm calc3(integer,real,real,string) ния.

Goal /*аналог процедуры main в языке C*. Вся программа Пример:

может состоять только из раздела Goal /..

%Пример:

деление(17,Rezult), Goal..

InpStr = "Отредактировать эту строку", деление(D,Rezult):-Rezult = (27-10)/D.

edit(InpStr,OutStr), file_str("primer.txt",InpStr2), Или:

concat(OutStr,InpStr2,S3),..

edit(S3,_).

delenie_plus(17,Rezult),..

CLAUSES /*раздел правил или определения "процедур"*/ delenie_plus(D,Rezult):- p(....):-p1(...), p2(.....),....

P1=27-10, 19 delenie2(P1,D,Rezult). ты с очередью фактов – assertz. Например, если во входном файле delenie2(P1,D,Rezult):-Rezult = P1/D. было 1000 строк и факты размещались при помощи assertz(input_string(NbS,TS,LS)), то используя рекурсивную Когда какие-то значения вас не интересуют, вместо них сле- процедуру дует ставить знак подчеркивания (указание анонимной перемен- get_all_DefStrings:- ной): input_string(NbS,TS,LS),!, database – b1 retractall(inp_strings(NbS,_,_)), некий_факт(string,integer,symbol,integer) write(NbS,’,’), clauses get_all_DefStrings,!;

.., !.

некий_факт(A,_,_,_), или же более корректный с точки зрения программирования write(A), на Прологе вариант, в котором используется бэктрекинг (да и фак.. ты не приходится удалять):

get_all_DefStrings:- 3.3. Внутренняя БД Пролога input_string(NbS,TS,LS), write(NbS,’,’),fail.

Используя аналогию с языком C, внутреннюю БД Пролога get_all_DefStrings.

(раздел facts, устаревшее имя раздела – database) можно рассматривать как множество массивов структур. Например, анализируя Вы получите на выходе последовательность чисел построчно входной текст, информацию о строках вы можете хра1,2,3,..,1000.

нить в структурах типа:

Если использовался при загрузке предикат domains asserta(input_string(NbS,TS,LS)),..

то те же процедуры выдатут: 1000,999,998,..,1.

number_str,type_str, length_str = integer..

Если факты были загружены в БД в произвольном порядке, database – ab_strings а нужно извлечь их в определенной последовательности, то для..

индексированного массива, каким является input_string, можно input_string(number_str,type_str,length_str) поступить так:

..

get_all_DefStrings(I):- Для размещения фактов используются встроенные предикаinput_string(I,TS,LS),!, ты assert, asserta, assertz (assert эквивалентно assertz). Извлекается write(I,’,’TS,’,’,LS),nl, факт по его имени (функтору). Удаляются факты при помощи Inew = I+1, встроеннных предикатов retract или retractall.

get_all_DefStrings(Inew),!;!.

Рассмотрим подробнее процессы размещения и извлечения фактов. Asserta всякий новый факт помещает в начало однименВстроенный предикат save сохраняет БД во внешнем файле ных фактов, assertz – в конец, т. е. для работы с множеством фак(не путать с внешней БД!).

тов как со стеком фактов следует использовать asserta, а для рабоsave(DosFileName) (string) – (i) 21 save(DosFileName,InternalDatabaseName) Пример:

(string,DatabaseName) – (i,i) p(A,C,Dplus):-A>=C,!,Dplus=A-C;Dplus=C-A.

Встроенный предикат consult загружает БД, сохраненную Или:

предикатом save, из файла в память.

p(A,C,Dplus):-A>=C,!,Dplus=A-C.

consult(DosFileName) (string) – (i) p(A,C,Dplus):-Dplus=C-A.

consult(DosFileName,InternalDatabaseName) (string,InternalDatabaseName) – (i,i) Конечно, наиболее простое решение:

p(A,C,Dplus):-Z:=A-C, Dplus=abs(Z), где abs – встроенная Примеры:

функция.

save("stringDB.dba",ab_strings) consult("stringDB.dba",ab_strings) Если в нашем примере со строками требуется получить все номера строк с длиной не более 45, тогда процедура, решающая Только одна БД в программе может быть неименованной.

эту задачу, будет такой:

Все остальные должны иметь имя.

get_all_DefStrings:- Вы можете сформировать факты БД в программе, написанinput_string(NbS,TS,LS), ной на любом другом языке, и записать их в файл или сформироLS< = 45, вать "вручную" при помощи текстового редактора, затем загрузить write(NbS,’,’), fail.

в память в программе на Прологе при помощи consult.

get_all_DefStrings. % или get_all_DefStrings:-!.

3.4. Обработка условий и организация циклов в Прологе 3.4.2. Использование предиката типа repeat Два встроенных предиката, очень полезных для обработки Пусть требуется в рамках одного правила предиката pravilo условий и организации циклов:

Pages:     | 1 || 3 | 4 |   ...   | 5 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.