рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

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

Логическое программирование - раздел Программирование,   1. Логическое Программирование После Многолетних Тео...

 

1. Логическое программирование

После многолетних теоретических работ по математической логике в 1972 году в Марселе (Франция) был создан язык для программирования в терминах логики - ПРОЛОГ (PROLOG). Его возможности и преимущества перед другими языками программирования долгое время были известны только немногим специалистам, работающим в области искусственного интеллекта. Сейчас эта область не является такой узкой, а оказывается, что многие практические вопросы, такие как обработка речи, проблема поиска решений, символьные вычисления, задачи управления, диагностики систем и т. д. могут решаться именно средствами и методами искусственного интеллекта. Окончательно Пролог стал актуальным в мировом масштабе после того, как в Японии в 1981 году проводилась известная конференция по искусственному интеллекту, где Пролог был объявлен ядром языкового обеспечения ЭВМ пятого поколения.

Для программиста особенность языка Пролог состоит в том, что он на основе выражений логики предикатов может заниматься "проблемой вообще". При этом программисту не надо заботиться о том, по каким алгоритмам ЭВМ обрабатывает эти выражения.

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

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

Разработаны разные версии Пролога. Фактически стандартным является DEC10-PROLOQ для ЭВМ серии DEC10. Он достаточно подробно описан в работе [1], которая хорошо представляет логические основы, принципы работы и содержит много примеров применения языка Пролог. В Советском Союзе вышли переводы описаний МПролога [2] для 16-разрядных ЭВМ и микро-Пролога [3] для ОС СР/М и MSDOS.

Почти все версии Пролога являются интерпретаторами и тем самым предоставляют преимущества, которые известны у Бейсика. Но "серьезные" применения Пролога, где число фактов и правил больше тысячи, требуют достаточно большую память, и поиск решения может занимать длительное время. По атому некоторые версии, в том числе, стандартная, имеют возможность компилировать отдельные части программы, или вообще -являются компиляторами. Количество ЛВВС (логических выводов в секунду) - несмотря на то, что есть заметные различия в зависимости от версии Пролога - у откомпилированной программы может быть в десять раз больше, чем у программы в режиме интерпретатора.

Турбо-Пролог появился в результате использования двух важных факторов. Это, во-первых, развитие ПЭВМ типа IBM с операционной системой MSDOS, которая стала стандартом практически во всем мире, а во-вторых, это известные достоинства "Турбо" таких языков как Турбо-Бейсик, Турбо-Сии, прежде всего, Турбо- Паскаль. Турбо-концепция (разработана она фирмой Borland, США), предусматривает встроенный редактор (упрощенный вариант WORDSTAR), компиляцию исходного текста в код, который быстро обрабатывается специальным интерпретатором и обеспечивает при появлении ошибки оперативный переход в редактор на место ошибки в программе. Таким образом, вся работа - от ввода исходной программы до выполнения задачи (возможно с отладкой) осуществляется "внутри" одной системы. Машинная графика и многооконность обеспечивают повышение эффективности разработки программ,

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

В минимальный комплект Турбо-Пролог 2.0 входят:

- PROLOG.EXE - файл компилятора

- OLD.SYS - файл, эмулирующий пользовательский интерфейс версий 1.x

- PROLOG.LIB - библиотечный файл, необходимый в случае создания автономных приложений - файлов .EXE,

- INIT.OBJ - необходимые для редактирования связей коды,

- TLINK.EXE - утилита редактирования связей Турбо-систем фирмы Borland

- TLIB.EXE - библиотекарь Турбо-систем фирмы Borland.

- PROLOG.ERR - сообщения об ошибках,

- PROLOG.HLP - файл помощи

- PROLOG.OVL - оверлейный файл, необходимый при запуске Турбо-Пролога и при создании файлов .EXE.

- файлы, предназначенные для использования при компиляции программ, включающих предикаты графического интерфейса фирмы Borland (BGI).

 

1. НАЧАЛО РАБОТЫ

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

В файле README на дистрибутивном диске содержится полный перечень файлов, поставляемых на дистрибутивных дисках, а также файлов, необходимых для работы с Турбо-Прологом. Турбо-Пролог устанавливается на персональных компьютерах IBM PC и полностью с ними совместимых.

1.1. Загрузка Турбо-Пролога

Введите prolog и нажмите Enter.

 
 


Files Edit Run Compile Options Setup

TURBO PROLOG 2.0

Copyright (c) 1986,88 by

Borland International, Inc

F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit

 
 


Рис.1.1. Начальное изображение на экране

 

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

Нужно нажать любую клавишу; на экране появятся четыре окна системы, как показано на рис.1.2. Каждое окно описывается ниже в разделе "Окна Турбо-Пролога".

Files Edit Run Compile Options Setup

Editor Dialog

Line1 Col1 WORK.PRO Indent Insert

 

 

Message Trace

 

 

       
   
 
 


F2-Save F3-Load F6-Switch F9-Compile Alt-X-Exit

 

 

Рис.1.2. Главное меню и четыре системных окна

 

1.2. Краткое описание меню и "горячих" клавиш

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

 

1.2.1. Главное меню

В составе главного меню высвечиваются команды и ряд других доступных ниспадающих меню. Элемент главного меню можно выбрать одним из трех способов:

1. Когда главное меню активно, нажатием выделенной засветкой заглавной буквы (F - Files, S - Setup и т.п.).

2. Когда главное меню активно, переводом в нужное место с помощью клавиш управления курсором полосы засветки и нажатием Enter.

3. Из любого состояния системы (за исключением внешнего редактора) нажатием сочетания Alt-<буква>, где <буква> - соответствующий первый символ выбитраемого элемента главного меню (Alt-E - Edit, Alt-R - Run и т.п.).

Примечание: Сочетание Alt-<буква> касается только элементов главного меню.

 

1.2.2. Ниспадающие меню

Четыре элемента главного меню активизируют в случае их выбора ниспадающие меню; это элементы Files, Compile, Options, Setup. Ниже даются их краткие характеристики:

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

Compile- Эти элементы позволяют управлять режимами компиляции (получение только объектных или загрузочных модулей и т.п.).

Options- В этом меню предусмотрено несколько вложенных подменю, с помощью которых можно задавать отдельные опции компиляции (проверка на переполнение, отладочная информация, размеры памяти), опции редактирования связей, а также библиотеки, которые должны использоваться при редактировании связей; в этом меню также предусмотрен режим редактирования файла определения проекта (.PRJ)

Setup- Ниспадающие меню этого элемента главного меню позволяют формировать нужную рабочую среду системы.

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

 

1.2.3. "Горячие" клавиши и командные клавиши

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

Имеется также ряд комбинаций клавиш, нажатие которых вызывает различные команды редактора или другие команды системы в зависимости от текущего режима работы. Такие клавиши называются командными. Ниже перечисляется большинство стандартных значений "горячих" и командных клавиш. Функции таких клавиш могут быть при желании изменены; это то, что в системе называется настраиваемым пользовательским интерфейсом. Соответствующая информация содержится в Справочном руководстве по Турбо-Прологу.

 

1.2.3.1. "Горячие" клавиши главного меню

Вызов меню Files Alt-F

Вызов редактора (Editor) Alt-E

Запуск программы из окна Edit Alt-R

Компиляция программы из окна Edit Alt-C

Вызов меню Options Alt-O

Вызов меню Setup Alt-S

Сохранение файла из окна Edit F2

Загрузка файла F3

Развертка-свертка текущего окна F5

Переход между окнами F6

Изменение размеров окон Shift-F10

Компиляция программы в памяти F9

Компиляция программы в файл .OBJ Shift-F9

Компиляция программы в файл .EXE Ctrl-F9

Компиляция проекта Alt-F9

Вызов ДОС Alt-D

Выход из Турбо-Пролога Alt-X

 

1.2.3.2. Командные клавиши редактора

Вызов онлайновой помощи F1

Сохранение файла из окна Edit F2

Загрузка файла F3

Развертка окна Edit F5

Переход в следующее окно F6

Копирование из внешнего редактора(Xcopy) F7

Вызов внешнего редактора (Xedit) F8

Компиляция программы в памяти F9

Вызов главного меню F10

 

По умолчанию в режиме редактора могут использоваться несколько командных клавиш, подобных используемым в редакторе WordStar. Эти клавиши могут использоваться для управления курсором, прокрутки строк окна редактора, манипулирования блоками текста и т.п. Кроме того, в целях совместимости в редактор версии 2.0 встроены блочные команды более ранних версий 1.х. (Их поддержка обеспечивается загрузкой соответствующих средств из файла OLD.SYS).

Ниже в разделе "Краткое описание редактора" рассмотрены наиболее широко применяемые командные клавиши редактора. Полный перечень и подробное описание всех командных клавиш редактора, а также другая подробная информация о внутреннем редакторе и вспомогательном внешнем редакторе содержится в Справочном руководстве по Турбо-Прологу, а также в соответствующем режиму редактирования меню помощи, вызываемом в режиме Edit нажатием клавиши F1.

 

1.2.3.3. Командные клавиши компиляции

Компиляция программы из окна Edit Alt-C

Компиляция программы в памяти F9

Компиляция программы в файл .OBJ Shift-F9

Компиляция программы в файл .EXE Ctrl-F9

Компиляция проекта Alt-F9

 

1.2.3.4. Командные клавиши режима трассировки

Трассировать следующий шаг F10

Вызов меню Trace Alt-T

Вызов меню Printer-Log Alt-P

 

1.2.3.5. Командные клавиши режима выполнения

Компиляция программы,редактирование связей

и запуск на выполнение Alt-R

Возврат из режима задания цели в окно Edit Ctrl-E

Воспроизведение снова последней цели F8

Изменение размера окон Shift-F10

 

1.3. Окна Турбо-Пролога

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

 

1.3.1. Окно редактирования Edit

В окно Edit загружаются и там редактируются программы. Для запуска программы на выполнение или компиляцию ее исходный текст должен быть помещен в это окно; текст можно набрать непосредственно с клавиатуры или загрузить из файла, воспользовавшись элементом меню Files/Load. Для входа в редактор с целью редактирования или ввода программы следует нажать Alt-E или выбрать в главном меню элемент Edit.

 

1.3.2. Окно диалога Dialog

Окно диалога Dialog - это окно стандартного ввода-вывода программ. Если программа запускается на выполнение из среды разработки ("внутри" Турбо-Пролога) и не создает своего собственного окна вывода, то любой записываемый или читаемый текст будет появляться в окне диалога.

 

 

1.3.3. Окно сообщений Message

Окно сообщений представляет собой окно вывода системной информации. Турбо-Пролог выводит в этом окне такие сообщения, как

Load c: tprolog2 my_file.pro

Compile c: tprolog2 my_file.pro

 

1.3.4. Окно трассировки Trace

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

Для использования окна трассировки нужно выбрать в меню опций элемент Trace (ShortTrace) или поместить в начало исходного текста программы директиву компилятора trace (shorttrace). Окно трассировки используется всякий раз, когда программа запускается на выполнение внутри системы, в которой активизирован режим трассировки.

 

1.4. Краткое описание редактора

 

1.4.1. Перемещения в пределах окна Edit

Масштаб перемещений в пределах окна Edit может быть малым, средним и большим. Малые перемещения - от символа к символу по горизонтали и от строки к строке по вертикали; средние - от слова к слову или от одного конца окна (или строки) к другому; большие - в пределах нескольких видимых окон или от одного конца файла к другому.

Перемещение курсора вправо на один символ Правая стрелка или Ctrl-D

Перемещение курсора влево на один символ Левая стрелка или Ctrl-S

Перемещение курсора на одну строку вверх Стрелка вверх или Ctrl-E

Перемещение курсора на одну строку вниз Стрелка вниз или Ctrl-X

Прокрутка вверх на одну строку Ctrl-W

Прокрутка вниз на одну строку Ctrl-Z

Перемещение курсора вправо на одно слово Ctrl-Правая стр.или Ctrl-F

Перемещение курсора влево на одно слово Ctrl-Левая стр. или Ctrl-A

Перемещение курсора в правый конец строки End или Ctrl-Q D

Перемещение курсора в левый конец строки Home или Ctrl-Q S

Перемещение курсора к первой строке окна Ctrl-Home

Перемещение курсора к последней строке окна Ctrl-End

Перемещение курсора на одну страницу вверх PgUp или Ctrl-R

Перемещение курсора на одну страницу вниз PgDn или Ctrl-C

Перемещение курсора в начало файла Ctrl-PgUp или Ctrl-Q R

Перемещение курсора в конец файла Ctrl-PgDn или Ctrl-Q

 

1.4.2. Удаление текста

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

Удаление символа в позиции курсора Del или Ctrl-G

Удаление символа слева от курсора Backspace или Ctrl-H

Удаление слова, на которое указывает курсор Ctrl-T

Удаление строки, на которую указывает курсор Ctrl-Y

Удаление части строки слева от курсора Ctrl-Q T

Удаление части строки справа от куросра Ctrl-Q Y

 

 

1.4.3. Манипулирование блоками текста

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

Отметить начало блока Ctrl-K B

Отметить конец блока Ctrl-K K

Скопировать(вставить) отмеченный блок Ctrl-F5 или Ctrl-K C

Переместить(вставить) отмеченный блок Ctrl-K V

Удалить отмеченный блок Ctrl-K Y

Отменить удаление блока Ctrl-F7 Ctrl-K U

Записать отмеченный блок в файл на диске Ctrl-K W

Вывести отмеченный блок на принтер Ctrl-K P

 

1.5. Ваша первая программа на Турбо-Прологе

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

/* Ваша первая программа */ goal

makewindow(1,7,7,"Моя первая программа",4,56,14,22),

write("Введите свое имя,n а затем нажмитеn Enter."),

cursor(5,4),

readln(Имя),

write("Добро пожаловатьn в Турбо-Прологn ", Имя).

 

1.5.1. Ввод программы с помощью редактора

Первое, что должно быть сделано, - это ввод программы в режиме редактора; для этого нужно активизировать окно Edit, нажав Alt-E. Изображение на экране станет и таки, как показано на рис.2.3. По умолчанию Турбо-Пролог работу в режиме редактирования всегда начинает с пустого файла WORK.PRO

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

 

1.5.1.1. Исправление опечаток

Чтобы освоить исправление ошибок, нужно ввести первую строку вводной программы в виде: foal.

Для исправления ошибки курсор нужно подвести к "ошибочно" введенной букве f и нажать клавишу Del. Буква сотрется. В эту позицию теперь следует поместить букву g. Таким образом, ошибка будет исправлена.

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

 

1.5.1.2. Прокрутка текста в окне редактора

Когда будет вводиться окончание строки, начинающейся с makewindow( ... , набранная уже часть текста будет смещаться в пределах окна влево. Чтобы убедиться, что текст совсем не исчезает, нужно, набрав всю строку и нажав Enter, нажать затем клавишу Backspace. "Исчезнувший" текст появится на экране снова. После этого следует ввести программу до конца.

 

1.5.2. Запуск программы на выполнение

После правильного ввода текста программы следует нажать Alt-R. Если программа была введена правильно, то она будет компилироваться, а затем выполняться.

Если программа была введена неправильно, то курсор остановится в окне редактора на ошибке. Если в программе есть ошибки, то их следует исправить, а затем нажать для продолжения F10.

Теперь следует ввести имя и нажать Enter. Программа ответит:

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

в Турбо-Пролог

Егор (или выведет любое другое имя пользователя) и будет ожидать до тех пор, пока пользователь не нажмет рычаг пробела. Когда это произойдет, окно программы исчезнет, оставив видимыми главное меню и текст программы. Можно попробовать запустить программу снова, введя на этот раз другое имя.

 

1.5.3. Что происходит при синтаксической ошибке?

Чтобы увидеть, что происходит при синтаксической ошибке в программе, необходимо вернуться назад и в нести в текст такую ошибку умышленно. Если возврат в окно редактирования не был произведен, то необходимо его выполнить, нажав Alt-E.

Можно, к примеру, перевести курсор в конец слова goal и добавить после него точку, а затем, нажав Alt-R, снова запустить программу на выполнение.

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

Если пользователю в какой-либо момент требуется дополнительная информация, он всегда нажатием F1 может инициировать выдачу на экран "помощи".

 

1.5.4. Запись программы на диск

Для сохранения программы на диске необходимо в главном меню выбрать опцию Files, а затем в рамках ниспадающего меню этой опции - элемент Write To. После активизации этого режима следует ввести myfirst и нажать Enter. Турбо-Пролог запишет содержимое рабочего файла в файл MYFIRST.PRO (стандартное расширение PRO будет добавлено автоматически).

 

1.5.5. Просмотр файлов на диске

Чтобы просмотреть список всех программ Турбо-Пролога в текущем каталоге текущего диска, необходимо вернуться в меню Files (нажав Alt-F) и выбрать элемент Directory. Турбо-Пролог ответит выводом прямоугольника с запросом Enter file mask (Введите маску файлов). Можно воспользоваться принимаемой по умолчанию маской *.*, запрашивающей весь список файлов текущего каталога, или указать свою маску; так, *.PRO запросит вывод списка всех файлов с расширением .PRO, а ??PROJ.* даст список, подобный следующему:

MYPROJ.PRO

NUPROJ.OBJ

22PROJ.NEW

AAPROJ.XYZ

В рассматриваемом случае нужно в рамках прямоугольника запроса ввести *.PRO. На экране появится список всех программ текущего каталога с расширением .PRO, включая и MYFIRST.PRO. Для возврата в окно редактирования нужно нажать Alt-E.

 

1.6. Трассировка программы

В данном разделе будет показано, как получить т р а с с у программы на Турбо-Прологе. Для этого будет использоваться MYFIRST.PRO, рассматривавшийся выше пример. Если этот файл уже записан на диск, то для его загрузки в окно редактора следует воспользоваться командой Load меню Files; если же нет, то программу нужно набрать снова Что такое трасса ? Это встроенное в Турбо-Пролог диагностическое средство, позволяющее пошагово отслеживать выполнение программы. При помощи трассировки можно следить за логикой выполнения написанной на Турбо-Прологе программы: можно увидеть, какие именно действия выполняет система в попытке достичь поставленную цель. Каждый трассируемый шаг отображается в окне Trace; чтобы перейти к очередному шагу, нужно нажать F10.

Для выполнения трассировки в самом начале программы следует задать директиву trace, как в следующем примере:

trace goal

makewindow(1,7,7,"Моя первая программа",4,56,14,22),

write("Введите свое имя,n а затем нажмитеn Enter."),

cursor(5,4),

readln(Имя),

write("Добро пожаловатьn в Турбо-Прологn ", Имя).

 

Вставив в программу trace, можно попытаться запустить ее на выполнение с трассировкой (Alt-R). Нужно следить за тем, что происходит на экране. В окне Edit курсор мигает в начале цели, ав окне Trace запуск на отработку этой цели отражается сообщением:

CALL: goal()

 

Чтобы отработка этой цели осуществлялась в пошаговом режиме, необходимо далее нажать F10. После первого нажатия F10 в окне Trace появится сообщение

CALL:makewindow(1,7,7,"Моя первая программа",4,56,14,22) отражающее тот момент, что для достижения цели должен быть удовлетворен предикат makewindow. Снова нужно нажать F10; Турбо Пролог отработает вызов makewindow, построив окно в верхнем правом углу экрана. Это найдет свое отражение в окне трассировки:

RETURN:makewindow(1,7,7,"Моя первая программа",4,56,14,22)

И снова нужно нажать F10 и наблюдать за тем, что происходит в каждом из окон, вплоть до появления в окне трассировки сообщения

CALL: readln(_)

Снова нужно нажать F10. Курсор должен будет остановиться и мигать в том месте окна программы, где должно быть введено имя. Нужно набрать Олег и нажать Enter. В окне Trace появится сообщение

RETURN: readln("Олег")

После этого нужно нажимать F10 до тех пор, пока в окне Trace не появится сообщение

RETURN: goal()

означающее завершение работы программы. После нажатия F10 еще один (последний) раз система выдаст запрос на нажатие пробела для возврата в главное меню.

ОСНОВЫ ЯЗЫКА ПРОЛОГ

1. Программа на ТП состоит из выражений (clauses), которые представляют собой фразы двух типов: факты и правила.

- факты - это отношения или свойства, о которых программист знает что они истинны;

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

 

2. Факты имеют следующий обобщенный вид:

 

свойства(объект,объект,..,объект) или

отношение(объект,объект,..,объект)

где "свойство" - это свойство объекта,а "отношение" - это отношение между объектами . Разница не так велика ,поэтому далее в речь в обеих случаях будет идти об отношениях.

 

3. Каждый приведенный в программе факт состоит либо из отношения, которое распространяется на один или несколько объектов, либо из свойства одного или нескольких объектов. Например, в факте ТП

 

нравится(тимофей,лапта). /* Тимофею нравится лапта*/

отношением является "нравится",а объектами - "тимофей" и "лапта" . А в факте

 

левша(евгений) /*Евгений - левша */

"левша" является свойством ,а "евгений" - объектом.

 

4. _Правила_ имеют общий вид "Заголовок if Тело", а в прог­­­ рамме это выглядит приметно так:

 

отношение(об"ект, об"ект, ... ,об"ект) if

отношение(об"ект, об"ект, ... ,об"ект) and

..........................................

отношение(об"ект, об"ект, ... ,об"ект).

 

5. Имена отношений и об"ектов могут выбираться для программ произвольно и лишь со следующими ограничениями:

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

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

 

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

 

7. _Переменные_ позволяют записывать обобщенные факты и правила и задавать обобщенные вопросы.

- Имена переменных в ТП должны начинаться с заглавной буквы или знака подчеркивания ("_"), после которых могут следовать любые комбинации букв ( прописных и строчных ), цифр и знаков подчер­­­кивания.

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

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

 

8. Если требуется,чтобы запрос относился только к части информации , можно использовать анонимные переменные, позволяющие игнорировать ненужные значения . В ТП анонимные переменные представляются единичным знаком подчеркивания(_).

Анонимная переменная может использоваться на месте любой переменной;она не соответствует ничему.Значения анонимных переменных никуда не передаются.

 

9. Обращение к ТП с вопросами относительно приведенных в программе фактов называется выдачей запросов к ТП-системе; запрос обычно называется целью (goal). ТП пытается достичь цель(ответить на запрос), просматривая факты последовательно от самого начала до самого конца.

 

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

 

11. Более читабельной программу делает коментарий . Его можно задать, заключив текст в скобки вида /* и */ или поставить перед началм текста знак % .

 

12. В ТП предусмотрено несколько видов приведения чего-либо в соответствие :

- идентичные структуры соответствуют одна другой;

- свободная переменная соответствует константе или ранее связанной переменной (и становится связанной с этим значением);

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

 

13. Чтобы текст на ТП было еще легче читать , слово if и соответствующее ему символьное обозначение :- могут использоваться взаимозаменяемо; то же относится к парам and (и) и запятая(","),а также к or(или) и точка с запятой(";"). Например, следующие два программных варианта являются эквивалентными:

 

старше(Человек1,Человек2) if старше(Человек1,Человек2):­­­ возраст(Человек1,Возраст1) and возраст(Человек1,Возраст1),

возраст(Человек2,Возраст2) and возраст(Человек2,Возраст2),

Возраст1>Возраст2. Возраст1>Возраст2.

 

 

СТРУКТУРА ПРОГРАММЫ

===================

 

1. Основная структура программы на ТП имеет следующий вид:

 

domains

/* ...

объявления доменов

... */

predicates

/* ...

объявление предикатов

... */

goal

/* ...

подцель_1,

подцель_2,

и т.д.

... */

clauses

/* ...

выражения (правила и факты)

... */

 

2.Раздел clauses - это раздел, в котором размещаются факты и правила, которыми ТП будет оперировать при попытке удовлетворить цель программы.

 

3.Раздел predicates - это раздел, в котором объявляются предикаты и домены(типы) аргументов предикатов. Имена предикатов должны начинаться с буквы (предпочтительно строчной), за которой уже могут следовать буквы, цифры и знаки подчеркивания. Общая длина имени не может превышать 250 символов. При этом нельзя использовать пробелы, знаки минус, звездочки и знаки косой черты. Объявления предикатов имеют вид:

 

predicates

имяПредиката(тип_аргумента1,тип_аргумента2,...,

тип_аргументаN)

 

где тип_аргумента1,...,тип_аргументаN представляет собой

либо стандартные домены, либо домены, объявленные в разделе

domains. Объявление домена аргумента и определение типа

аргумент-это однои то же.

 

4.Раздел domains-это раздел,в котором объявляются любые нестандартные домены, используемые для аргументов предикатов. Домены в Прологе аналогичны типам в других язаках. Основными стандартными доменами ТП являются char, integer,real, string и symbol; специализированные стандартные домены рассматриваются в других главах. Объявления доменов имеют вид:

 

domains

тип_аргумента1,...,тип_аргументаN = <стандартный домен>

аргумент1,...,аргументN = <составной домен 1>;

<составной домен 2>;

<...>

<составной домен N>;

 

5.Раздел goal-это раздел, в котором размещается в н у т р е н н я я ц е л ь программы; это дает возможность запускать программу автономно, вне среды ТП. В случае задания внутренней цели ТП ищет только первое решение, а значения, которыми связываются переменные, не выводятся.

Если внутренняя цель не используется, то в рамках окна Dialog после запуска программы вводится в н е ш н я я ц е л ь. В случае задания внешней цели ТП ищет все решения и выводит значения переменных.

 

6.ТП имеет более 200 встроенных стандартных предикатов и более десяти стандартных доменов: при использовании в программах объявления этих предикатов и доменов не требуется.

 

7."А р н о с т ь" предиката-это число его аргументов; два аргумента могут иметь одно и то же имя, но разную арность. Версии предикатов с разной арностью должны группироваться попарно в разделах predicates и clauses, но разная арность делает предикаты тоже полностью разными.

 

8.Правило имеет вид:

ЗАГОЛОВОК:-<Подцель1>,<Подцель2>,...,<ПодцельN>.

Чтобы выполнить правило, Пролог должен удовлетворить все его подцели, создав непротиворечивое множество значений переменных. Если какая-либо подцель не достигается, Пролог возвращается и рассматривает альтернативные варианты предыдущих подцелей, а затем продолжает уже с другими значениями переменных. Такой процесс называется поиском с возвратом (backtracking).

 

9.Оператор if ("если") Пролога отличается от IF других языков программмирования; правило в Прологе имеет вид условного выражения т о /е с л и , тогда как операторы IF в других языках строятся по типу е с л и /т о.

 

10.Менее часто используемыми в ТП разделами являются разделы database, constants и различные разделы global. Кроме того, можно давать определенные указания компилятору в виде директив в самом начале исходного текста программ.

 

ОСНОВНЫЕ СТАНДАРТНЫЕ ПРЕДИКАТЫ

Каждый пpедикат описан в следующем фоpмате:

имя пpедиката и типичный вызов;

тип паpаметpов в соответствующих позициях пpедиката;

список возможных шаблонов для этого пpедиката;

описание выхода после вызова пpедиката

для каждого допустимого шаблона.

ВВОД =====

readln(StringVariable) Чтение_стpоки(стpоковая пеpеменная)

(string)

readint(IntgVariable) Чтение_целого_числа(целочисленная пеpеменная)

(integer)

readreal(RealVariable) Чтение_действительного_числа(действительная пеpеменная)

(real)

readchar(CharVariable) Чтение_символа(символьная пеpеменная)

(char)

file_str(DosFileName,StringVariable) Чтение_файла_в_строковую_переменную(ИмяФайла,СтpоковаяПеpеменная)

(string,string)

 

inkey(CharVariable) Клавиша_нажата_после_последней_операции_чтения (СимвольнаяПеременная)

(Char)

keypressed Клавиша_Нажата

unreadchar(CharToBePushedBack) НеЧитатьСимвол(СимволДБВытолкнутьНазад)

(Char)

readterm(Domain,Variable) Чтение_объекта(Объект,Пеpеменная)

(DomainName,Domain)

 

ВЫВОД ======

write( VariableіConstant*) Запись( ПеpеменнаяіСписокКонстант)

nl Возвpат каpетки

writef( FormatString, VariableіConstant* ) Запись_форматированная( ФоpматСтpоки, ПеpеменнаяіСписокКонстант)

В фоpмате стpоки возможны следующие опции после знака "пpоцент": %d Ноpмальное десятичное число (символы и целые) %u Целое без знака (символы и целые) %R Номеp ссылки базы данных %X Длинное шестнадцатиpичное число (стpоки,номеp ссылки базы данных) %x Как шестнадцатиpичное число (chars and integers) %s Стpоки (symbols and strings). %c Как символ (chars and integers). %g Действительные числа в наиболее коpотком фоpмате (по умолчанию для reals) %e Действительные числа с экспоненциальной нотацией %f Действительные числа с фиксиpованной нотацией %lf Только для совместимости с языком C (fixed reals)

n - новая стpока t - табулятоp nnn - символ с кодом nnn

 

ФАЙЛОВАЯ СИСТЕМА =================

openread(SymbolicFileName,DosFileName) Откpыть_для_чтения(СимвИмяФайла, ИмяФайлаДос)

(file,string)

openwrite(SymbolicFileName,DosFileName) Откpыть_для_записи(СимвИмяФайла,ИмяФайлаДос)

(file,string)

openappend(SymbolicFileName,DosFileName) Откpыть_для_дозаписи(СимвИмяФайла,ИмяФайлаДос)

(file,string)

openmodify(SymbolicFileName,DosFileName) Откpыть_для_чт-записи(СимвИмяФайла,ИмяФайлаДос)

(file,string)

readdevice(SymbolicFileName) Пеpеназначить_текущее_устpойство_чтения (СимвИмяФайла)

(file)

writedevice(SymbolicFileName) Пеpеназначить_текущее_устpойство_записи (СимвИмяФайла)

(file)

filemode(SymbolicFileName,FileMode) Режим_файла(СимвИмяФайла,РежимФайла)

(file,Integer)

 

FileMode пpинимает значения:

0: Teкстовый pежим

1: Двоичный pежим.

 

closefile(SymbolicFileName) Закpыть_файл(СимвИмяФайла)

(file)

filepos(SymbolicFileName,FilePosition,Mode) Указатель_файла(СимвИмяФайла,Поз_В_Файле,Режим)

(file,real,integer)

Mode пpинимает значения:

0:Start І Начало

1:Relative І Соответствует

2:End І Окончание

eof(SymbolicFileName) Пpовеpка_на_конец_файла(СимвИмяФайла)

(file)

flush(SymbolicFileName) Запись_содеpжимого_буфеpа_файла_в_текущее_устp-во(СимвИмяФайла)

(file)

existfile(DosFileName) Пpовеpка_наличия_файла(ИмяФайлаДос)

(string)

deletefile(DosFileName) Удалить_файл(ИмяФайлаДос)

(string)

renamefile(OldDosFileName,NewDosFileName) Пеpеименовать_файл(СтаpИмяФайлаДос,НовоеИмяФайлаДос)

(string,string)

disk(DosPath) Установка_текущего_пути_и_диска(ПутьДоступа)

(string)

 

РАБОТА С ЭКРАНОМ =================

scr_char(Row,Column,Char) Cимвол_на_экран(Ряд,Колонка,Символ)

(integer,integer,char)

scr_attr(Row,Column,Attr) Установить_атpибут_символа_в позицию_Row,Column

(Ряд,Колонка,Атрибут)

(integer,integer,integer)

field_str(Row,Column,Length,String) Поместить_строку_длиной_Length_в позицию_Row,Column

(Ряд,Колонка,Длина,Строка)

(integer,integer,integer,string)

field_attr(Row,Column,Length,Attr) Установить_атpибут_поля(Ряд,Колонка,Длина,Атрибут)

(integer,integer,integer,integer)

cursor(Row,Column) Установить_куpсоp(Ряд,Колонка)

(integer,integer)

cursorform(Startline,Endline) Установить_фоpму_куpсоpа(НачалоСтроки,КонецСтроки)

0<НачалоСтроки<14, 0<КонецСтроки<14

(integer,integer) - (i,i) (o,o)

 

attribute(Attr) Установить_атpибут_экpана(Атрибут)

(integer)

textmode(Rows,Cols)

Установить_текcтовый_pежим(Ряд,Колонка)

(integer,integer)

snowcheck(on/off) Пpовеpить_на_снег(on/off)

(string)

 

РАБОТА С ОКНАМИ ================

makewindow(WindowNo,ScrAtt,FrameAtt,Framestr,Row,Column,Height,Width)

(integer,integer,integer,string,integer,integer,integer,integer)

makewindow(WindowNo,ScrAtt,FrameAtt,Framestr,Row,Column,Height,Width,

ClearWindow,FrameStrPos,BorderChars) Создать_окно(НомерОкна,АтрибутЭкрана,АтрибутФрейма,СтрокаЗаголовка,Ряд,

Колонка,Высота,Ширина,ОчисткаОкна,ЦентровкаЗаголовка,СимволыБордюра)

(integer,integer,integer,string,integer,integer,integer,integer,

integer,integer,string)

 

ОчисткаОкна = 0 Не очищать окно после создания.

= 1 Очищать окно после создания.

 

ЦентровкаЗаголовка = 255 Центpиpовать стpоку экpана (заголовок окна)

<> 255 Поместить стpоку экpана в заданную позицию.

 

СимволыБордюра Стpока длиной шесть символов, специфициpующая,

как наpисовать окно:

 

1ый символ: Веpхний левый угол

2ой символ: Веpний пpавый угол

3ий символ: Нижний левый угол

4ый символ: Нижний пpавый угол

5ый символ: Гоpизонтальная линия

6ой символ: Вертикальная линия

Напpимеp:

"ЪїАЩДі" для одиночного боpдюpа

или "Й»ИјНє" для двойного боpдюpа

 

shiftwindow(WindowNo) Пеpеключить_окно(НомерОкна)

 

(integer)

gotowindow(WindowNo) Пеpейти_в_окно_номеp(НомерОкна)

(integer)

resizewindow Изменить_pазмеp_окна resizewindow(StartRow,NoOfRows,StartCol,NoOfCols) Изменить_pазмеp_окна(НачалоСтpоки,К-воСтpок,НачалоКолонки,К-воКолонок)

(integer,integer,integer,integer) colorsetup(Main_Frame) Установка_цвета(ОкноЛибоФрейм)

(integer)

Main_frame = 0 Изменить цвет окна

= 1 Изменить цвет фpейма.

existwindow(WindowNo) Проверка_существования_окна(НомерОкна)

(integer)

removewindow Убрать_окно_с_экрана

removewindow(WindowNo,Refresh) Убрать_окно_с_экрана(НомОкна,РежОбновления)

(Integer,Integer)

Refresh = 0 Не восстанавливать цвет экpана

= 1 Восстановить цвет экpана

clearwindow очистить_окно

window_str(ScreenString) Вывести_строку_на_экран(СтрокаЭкрана)

(string)

window_attr(Attribute) Присвоить_атрибут_текущему_окну(Атрибут)

(integer)

scroll(NoOfRows,NoOfCols) Прокрутка(Кол-воСтрок,Кол-воКолонок)

(integer,integer)

framewindow(FrameAttr) Рамка_окна(АтрибутРамки)

(integer)

framewindow(FrameAttr,FrameStr,FrameStrPos,BorderChars) Рамка_окна(АтрибутРамки,ЗаголовокОкна,ПозицияЗаголовкаОкна,СимвНачертРамки)

(Integer,String,Integer,String)

 

FrameAttr = атpибут для рамки окна

 

FrameStr = Заголовок окна

 

FrameStrPos = 0 .. шиpина окна. Указывает, где pазместить

заголовок окна.Величина 255 центpиpует заголовок.

 

BorderChars = Стpока длиной 6 символов, указывающая какими

символами изобразить рамку. Смотpи MAKEWINDOW.

 

РАБОТА СО СТРОКАМИ ==================

frontchar(String,FrontChar,RestString) Разбивка_строки(Строка,РазбиваемыйСимвол,ОстальнаяСтрока)

(string,char,string)

fronttoken(String,Token,RestString) Разбивка_лексемы(Строка,Лексема,ОстальнаяСтрока)

(string,string,string)

frontstr(Lenght,Inpstring,StartString,RestString) Разбивка_строки(Длина,ВходнаяСтрока,НачальнаяСтрока,ОстальнаяСтрока)

(integer,string,string,string)

concat(String1,String2,String3) Сцепление(Строка1,Строка2,Строка3) String3 = String1 + String2

 

(string,string,string)

str_len(String,Length) Длина_строки(Строка,Длина)

(string,integer)

isname(StringParam) Проверка_синтаксиса(ПараметрСтроки)

(string)

format( OutputVariable, FormatString, Variable|Constant* ) Формат(ВыходнаяПеременная,ФорматСтроки,ПеременнаяіСписокКонстант)

Смотри "writef" для Формата строки

 

ПРЕОБРАЗОВАНИЯ ===============

char_int(CharParam,IntgParam) Преобразование_символа_в_целое (СимвольныйПараметр,ЦелыйПараметр)

(char,integer)

str_int(StringParam,IntgParam) Преобразование_строки_в_целое (СтроковыйПараметр,ЦелыйПараметр)

(string,integer)

str_char(StringParam,CharParam) Преобразование_строки_в_символ (СтроковыйПараметр,Символ)

(string,char)

str_real(StringParam,RealParam) Преобразование_строки_в_real

(string,real)

upper_lower(StringInUpperCase,StringInLowerCase) Преобразование_верхего_регистра_в_нижний (СтрокаНаВерхнемРегистре,СтрокаНаНижнемРегистре)

(string,string)

upper_lower(CharInUpperCase,CharInLowerCase) Преобразование_верхего_регистра_в_нижний (СимволНаВерхнемРегистре,СимволНаНижнемРегистре)

(char,char)

 

 

РАБОТА С ВНУТРЕННЕЙ БАЗОЙ ДАННЫХ ================================

consult(DosFileName) Добавить_файл_к_текущей_базе_данных

(ИмяФайлаДос)

(string)

consult(DosFileName,InternalDatabaseName) Добавить_файл_к_текущей_базе_данных

(ИмяФайлаДос,ИмяВнутреннейБазыДанных)

(string,InternalDatabaseName)

save(DosFileName) Сохранить(ИмяФайлаДос)

(string)

save(DosFileName,InternalDatabaseName) Сохранить(ИмяФайлаДос,ИмяВнутреннейБазыДанных)

(string,DatabaseName)

assert( Term ) Добавить(Отношение)

(InternalDatabaseDomain)

(ОбьектВнутреннейБазыДанных)

asserta( Term ) Добавить_перед(Отношение)

(InternalDatabaseDomain)

(ОбьектВнутреннейБазыДанных)

assertz( Term ) Добавить_после(Отношение)

(InternalDatabaseDomain)

(ОбьектВнутреннейБазыДанных)

nondeterm retract( Term ) Удалить_терм_базы_данных(Отношение)

(InternalDatabaseDomain)

(ОбьектВнутреннейБазыДанных)

nondeterm retract( Term, InternalDbaseName ) Удалить_терм_поименованной_базы_данных(Отношение,ИмяВнутреннейБазыДанных)

(InternalDatabaseDomain)

(ОбьектВнутреннейБазыДанных)

 

retractall(Term) Удалить_все(Отношение)

(InternalDatabaseDomain) Выполняется как комбинация ошибочного удаления; нет выходных аргументов. Всегда успешно выполняется.

retractall(_, InternalDbaseName )

(_,InternalDatabaseDomain) Выполняется так же,как и предыдущий,но с поименованной базой.

readterm(Domain,Variable) Чтение_объекта(Объект,Пеpеменная)

(DomainName,Domain)

 

РАБОТА С ВНЕШНЕЙ БАЗОЙ ДАННЫХ =============================

db_create(Dbase,Name,Place) Создать_базу_данных(СелекторБД,ИмяФайла,Место)

(db_selector,string,place) (база_данных,строка,место)

db_open(Dbase,Name,Place) Открыть_базу_данных(СелекторБД,ИмяФайла,Место)

(db_selector,string,place)

(база_данных,строка,место)

db_openinvalid(Dbase,Name,Place) Ошибка_открытия_базы_данных(СелекторБД,ИмяФайла,Место)

(db_selector,string,place)

db_close(Dbase) Закрыть_базу_данных(СелекторБД)

(db_selector)

 

db_delete(Name,Place) Удалить_базу_данных(ИмяФайла,Место)

(string,place)

db_flush(Dbase) Запись_буферов_базы_данных(СелекторБД)

(db_selector)

db_garbagecollect(Dbase) Мусоросборник_базы_данных(СелекторБД)

(db_selector)

db_copy(Dbase,Name,Place) Копировать_базу_данных(СелекторБД,ИмяФайла,Место)

(db_selector,string,place)

nondeterm db_chains(Dbase,Chain) Цепи_базы_данных(СелекторБД,Цепь)

(db_selector,string)

nondeterm db_btrees(Dbase,BtreeName) Бинарные_деревья_базы_данных(СелекторБД,ИмяДерева)

(db_selector,string)

db_statistics(Dbase,NoOfTerms,MemSize,DbaSize,FreeSize) Статистика_БД(СелекторБД,ЧислоЗаписей,РазмерВпамяти,

РазмерБазыДанных,СвободноеМесто)

(db_selector,real,real,real,real)

chain_inserta(Dbase,Chain,Domain,Term,Ref) Вставить_в_цепь_перед(СелекторБД,Цепь,Обьект,Запись,Ссылка)

(db_selector,string,symbol,<Domain>,ref)

chain_insertz(Dbase,Chain,Domain,Term,Ref) Вставить_в_цепь_после(СелекторБД,Цепь,Обьект,Запись,Ссылка)

(db_selector,string,symbol,<Domain>,ref)

chain_insertafter(Dbase,Domain,Ref,Term,NewRef) Вставить_в_цепь_после(СелекторБД,Обьект,Ссылка,Запись,НоваяСсылка)

(db_selector,symbol,ref,<Domain>,ref)

chain_delete(Dbase,Chain) Удалить_из_цепи(СелекторБД,Цепь)

(db_selector,string)

nondeterm chain_terms(Dbase,Chain,Domain,Term,Ref) Записи_цепи(СелекторБД,Цепь,Обьект,Запись,Ссылка)

(db_selector,string,symbol,<Domain>,ref)

chain_first(Dbase,Chain,FirstRef) Первый_член_цепи(СелекторБД,Цепь,ПерваяСсылка)

(db_selector,string,ref)

chain_last(Dbase,Chain,LastRef) Последний_член_цепи(СелекторБД,Цепь,ПоследняяСсылка)

(db_selector,string,ref)

chain_next(Dbase,Ref,NextRef) Следующий_член_цепи(СелекторБД,Ссылка,СледующаяСсылка)

(db_selector,ref,ref)

chain_prev(Dbase,Ref,PrevRef) Предыдущий_член_цепи(СелекторБД,Ссылка,ПредыдущаяСсылка)

(db_selector,ref,ref)

term_delete(Dbase,Chain,Ref) Удалить_запись_в_цепи(СелекторБД,Цепь,Ссылка)

(db_selector,string,ref)

term_replace(Dbase,Domain,Ref,NewTerm) Заменить_запись_в_цепи(СелекторБД,Обьект,Ссылка,НоваяЗапись)

(db_selector,symbol,ref,<Domain>)

ref_term(Dbase,Domain,Ref,Term) Найти_запись(СелекторБД,Обьект,Ссылка,Запись)

(db_selector,symbol,ref,<Domain>)

bt_create(Dbase,BtreeName,Btree_selector,KeyLen,Order) Создать_дерево(СелекторБД,ИмяДерева,СелекторДерева,ДлинаКлюча,Порядок)

(db_selector,string,bt_selector,integer,integer)

bt_open(Dbase,BtreeName,Btree_selector) Открыть_дерево(СелекторБД,ИмяДерева,СелекторДерева)

(db_selector,string,bt_selector)

bt_close(Dbase,Btree_selector) Закрыть_дерево(СелекторБД,СелекторДерева)

(db_selector,bt_selector)

bt_delete(Dbase,BtreeName) Удалить_дерево(СелекторБД,ИмяДерева)

(db_selector,string)

bt_statistics(Dbase,Btree_selector,NoOfKeys,NoOfPages,Dept,

KeyLen,Order,PageSize) Статистика_BT-доступа(СелекторБД,СелекторДерева,ЧислоКлючей,ЧислоСтраниц,

Глубина,ДлинаКлюча,Порядок,РазмерСтраницы)

(db_selector,bt_selector,real,real,integer,integer,integer,integer)

key_insert(Dbase,Btree,Key,Ref) Вставить_ключ(СелекторБД,СелекторДерева,Ключ,Ссылка)

(db_selector,bt_selector,string,ref)

key_delete(Dbase,Btree,Key,Ref) Удалить_ключ(СелекторБД,СелекторДерева,Ключ,Ссылка)

(db_selector,bt_selector,string,ref)

key_first(Dbase,Btree,FirstRef) Первый_ключ(СелекторБД,СелекторДерева,ПервичнаяСсылка)

(db_selector,bt_selector,ref)

key_last(Dbase,Btree,LastRef) Последний_ключ(СелекторБД,СелекторДерева,ПоследняяСсылка)

(db_selector,bt_selector,ref)

key_search(Dbase,Btree,Key,Ref) Найти_ключ(СелекторБД,СелекторДерева,Ключ,Ссылка)

(db_selector,bt_selector,string,ref)

key_next(Dbase,Btree,NextRef) Следующий_ключ(СелекторБД,СелекторДерева,СледующаяСсылка)

(db_selector,bt_selector,ref)

key_prev(Dbase,Btree,PrevRef) Предыдущий_ключ(СелекторБД,СелекторДерева,ПредыдущаяСсылка)

(db_selector,bt_selector,ref)

key_current(Dbase,Btree,Key,Ref) Текущий_ключ(СелекторБД,СелекторДерева,Ключ,Ссылка)

(db_selector,bt_selector,string,ref)

EDITOR І РЕДАКТОР ====== display(String) Выдать_на_экран(Строка)

(string)

edit(InputString,OutputString) Редактировать(ВходнаяСтрока,ВыходнаяСтрока)

(string,string)

edit(InputString,OutputString,Headstr,Headstr2,Msg,Pos,Helpfilename,

EditMode,Indent,Insert,TextMode,RetPos,RetStatus) Редактировать(ВходнаяСтрока,ВыходнаяСтрока,Заголовок, Заголовок2,Сообщение,Позиция,ИмяФайлаПомощи,РежимРедактирования, Смещение,Вставка,ТекстовыйРежим,ПозицияВозврата,СостояниеВозврата)

(string,string,string,string,string,integer,string,

integer,integer,integer,integer,integer,integer)

 

Заголовок2 будет использоваться как имя файла в случае, если пользователь сохpаняет текст из pедактоpа.

РежимРедактирования = 0 pежим pаботы дисплея

= 1 pежим чтения/записи повеpх

 

Смещение = 0 без смещения

= 1 pежим aвтоматического смещения

 

Вставка = 0 запись повеpх

= 1 pежим вставки

ТекстовыйРежим = 0 Выключить текстовый pежим

= 1 Включить текст.pежим(автом.пеpевод стpоки)

ПозицияВозврата = Позиция куpсоpа после возвpата в выходную стpоку

СостояниеВозврата = 0 F10 peдактоp закончил F10

1 F10 peдактоp закончил Esc

 

editmsg(InputString,OutputString,Headstr,Headstr2,Msg,Pos, Helpfilename,RetStatus) Редактировать_сообщение(ВходнаяСтрока,ВыходнаяСтрока,Заголовок, Заголовок2,Сообщение,Позиция,ИмяФайлаПомощи,СостояниеВозврата)

 

(string,string,string,string,string,integer,string,integer)

 

УПРАВЛЯЮЩИЕ ПРЕДИКАТЫ ===================== findall( Variable, Atom, ListVariable ) Найти_все(Переменная,Частица,СписокПеременных)

not( Atom ) Не(Частица)

free( Variable ) Свободно_Ли(Переменная)

bound( Variable ) Занято_Ли(Переменная)

fail - ошибка

true - правда

getbacktrack(BTOP)

(integer)

cutbacktrack(BTOP)

(integer)

 

ARITHMETIC - АРИФМЕТИКА ========== ============

Aрифметические oператоры: +, -, *, /, mod, div

Логические операции: >, <, =, >=, <=, <>, ><

Функции: sin, cos, tan, arctan, ln, log, exp, sqrt, round, trunc, abs

 

 

КОРОТКО О ПРОГРАММНЫХ СЕКЦИЯХ =============================

Опции должны предшествовать другим секциям

CONSTANTS І Константы const1 = definition } определения const2 = definition }

[GLOBAL] DOMAINS І [Глобальные] ОБЛАСТИ (Типы данных)

dom [,dom] = [reference] declaration1; declaration2

dom [,dom] = [ссылки] определение1; определение2

listdom = dom*

dom = <basisdom>

 

[GLOBAL] DATABASE [ - <databasename> ] [Глобальная] БАЗАДАННЫХ [ - <имябазыданных> ]

[determ] pred1(....) І[определенный] предикат1

pred2(.....)

GLOBAL PREDICATES І Глобальные предикаты [determ|nondeterm] pred1(.........) І [определенный|неопределенный]

предикат1

-(i,i,o,..)(i,o,i,..) [ language c|pascal|fortran ] [ as "name" ]

pred2(........)

PREDICATES І Предикаты [determ|nondeterm] pred1(.........) І [определенный|неопределенный]

pred2(........)

CLAUSES І Правила и факты p(....):-p1(...), p2(.....), ... . p(....):-p1(...), p2(.....), ... .

 

include "имяфайла" Включить файл во время трансляции.

PREDEFINED DOMAINS І Типы данных по умолчанию ================== =========================

char 1 byte characters (символ длиной 1 байт) integer 2 byte integer numbers (целые длиной 2 байт) real 8 byte floating point numbers (числа с плавающей точкой

длиной 8 байт) ref database reference numbers (цифровые ссылки базы данных) symbol strings inserted in the internal symboltable (строки

во внутренней символьной таблице) string последовательность символов,напр. "hello worldn"

dbasedom generated domain for terms in the global database (генерируемый

тип данных для термов в глобальной базе данных) bt_selector returned binary tree selector(возвращаемый селектор

двоичного дерева) db_selector user-defined external database selectors (определенный

пользователем селектор внешней базы данных) place in_memory; in_ems; in_file

(в_памяти или в_расширенной_системе_памяти или в_файле) file keyboard; screen; printer; com1; stdin; stdout .... userdefined

(клавиатура или экран или печать или ...) reg reg(AX,BX,CX,DX,SI,DI,DS,ES)

регистры bgi_ilist list of integers used in the BGI predicates.

(список целых,используемых в предикатах BGI).

 

 

Логика высказываний

Например, предложение: Машина находится у дома. Является высказыванием. Назовем ее- p.

Логика предикатов

P(t1,t2,…tn), Где t1, t2, …, tn – аргументы,  

История о девушке Марии,

Живущей в монастыре.

       

Язык Турбо Пролог

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

Дизъюнкты

Функтор(аргумент1, аргумент2, …):-условие1,условие2,… . Где функтор- имя предиката; Аргумент1,аргумент2- аргументы функтора, где запятые это разделители.

Это означает, что голова дизъюнкта истинна, если истинна группа

Условие11, условие12,… ИЛИ группа условие21, условие22,….

НО лучше писать так:

функтор(аргумент1, аргумент2,…):-(условие11, условие12,…).

Функтор(аргумент1, аргумент2,…):-(условие21, условие22,…).

 

Константы и переменные

-mother -price -list‘f’ 169 1.4e-3  

Секции программы

1 Способ. имя области = d где d- любой тип. Например

Обработка программ Турбо Прологом

Целевое утверждение: wopros:-math(Math,"Мария"), сопоставляется с фактом из базы:

Возврат и отсечение

Именно поэтому в примере указан предикат fail. Он провоцирует поиск других решений, после того как было найдено первое решение. Этот поиск… Работу Турбо Пролога можно представить в виде упрощенной диаграммы обработки …  

Рекурсия

.f(0)=1 f(n+1)=(n+1)*f(n) .predikrtes fak(integer, real) .clauses

Работа с файлами

trace domains name,adr= string

Изменения в базе данных

asserta(факт) (dbasedom): (i)  

Арифметика

Арифметические утверждения присваивания имеют следующий общий вид:  

Работа с данными типа string

concat( строка1, строка2, строкаЗ) (string,string,string):(i,i,i)(i,i,o)(i,o,i)(o,i,i)  

Преобразование типов

Все предикаты преобразования типов действуют в обе стороны ((i,о) и (o,i)), а случай (i,i) проверяет истинность (не для предиката real). Преобразование между типами symbol и string, a

Команды операционной системы

Для выполнения команд system и dir необходимо, чтобы Турбо-Прологу была доступна дискета с COMMAND. СОМ.  

Версии Турбо-Пролога

Данные методические указания описывают версию 1.0. Уже доступная версия Турбо-Пролог 1.1 имеет следующие дополнительные возможности:

Внешняя среда системы Турбо-Пролог

Турбо-Пролог после запуска предпологает определенную конфигурацию своих и пользовательских файлов. Различаются пять каталогов:

– Конец работы –

Используемые теги: Логическое, Программирование0.048

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Логическое программирование

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Лабораторная работа №2 по "Основам теории систем" (Решение задач линейного программирования симплекс-методом. Варианты разрешимости задач линейного программирования)
Будем увеличивать , т.к. ее увеличение вызовет большее увеличение функции цели.Предположим, что , тогда Запишем новый опорный план . Все оценки… Теперь базисными переменными являются , а свободными . Для анализа этого плана… Будем увеличивать . Пусть , тогда откуда получаем Все оценки опорного плана должны бытьнеотрицательны, а значит должны…

Логическое и функциональное программирование
В основе такого программирования лежат взятие значения какой-то переменной, совершение над ним действия и сохранение нового значения с помощью… Этот процесс повторяется до тех пор, пока запустившая процесс функция не… Наиболее известными языками функционального программирования являются ЛИСП и РЕФАЛ, а логического - Пролог. Однако, с…

В первом семестре рассматриваются основные конструкции языка Си и базовая технология программирования структурное программирование
В первом семестре рассматриваются основные конструкции языка Си и базовая технология программирования структурное программирование... Структурное программирование это технология создания программ позволяющая... Компиляторы и интерпретаторы Трансляторы бывают...

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

Лекция 1. Объектно-ориентированное программирование – это новый подход к программированию. Объектно- ориентированные языки обладают свойством
ВВЕДЕНИЕ... Приступая к изучению более сложных конструкций языка С следует прежде всего повторить тот материал который был...

Методы линейного программирования, двойственность в линейном программировании
Методы линейного программирования двойственность в линейном... Задание Задание Задание...

Объектно-ориентированное программирование как идеология программирования и как технология. Достоинства и недостатки
Класс это шаблон который определяет форму объекта Он задает как данные так и код который оперирует этими данными Объекты это экземпляры... Объявление объекта типа Building... Building house new Building...

Программирование логических игр на visual basic
Label 47-48 ячейки для служебной информации.Нижний цветной индикатор образован Label49-Label55. Колонке элементов Level и игровому полю будут… Такая ячейка выделяется синим цветом, а номинал занятой ячейки прибавляется… Пока индикатор не исчез, игрок может перемещать игровой маркер по нижней строке вправо или влево от текущего положения…

НАДЕЖНОЕ ПРОГРАММНОЕ СРЕДСТВО КАК ПРОДУКТ ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ. ИСТОРИЧЕСКИЙ И СОЦИАЛЬНЫЙ КОНТЕКСТ ПРОГРАММИРОВАНИЯ. ИСТОЧНИКИ ОШИБОК В ПРОГРАММНОМ СРЕДСТВЕ
ВВЕДЕНИЕ... Лекция НАДЕЖНОЕ ПРОГРАММНОЕ СРЕДСТВО КАК ПРОДУКТ ТЕХНОЛОГИИ... Программа как формализованное описание процесса обработки данных Программное средство...

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

0.035
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам