Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пролог_лекция_3.doc
Скачиваний:
2
Добавлен:
14.09.2019
Размер:
79.36 Кб
Скачать

1. Раздел констант

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

1) атом, состоящий только из чисел, букв и символа подчеркива­ния и начинающийся со строчной буквы;

2) атом, состоящий целиком из специальных символов. К специ­альным символам относятся: + - * / ^ = ~ : ;? @ $ &

Атом, начинающийся с /*, будет воспринят как на­чало комментария, если он не заключен в одинарные кавычки. Как правило, в программах на Прологе используются атомы без кавычек. Атом, который необязательно заключать в кавычки, может быть записан и в кавычках. Запись с внешними кавычками и без них опре­деляет один и тот же атом. Допустимы случаи, когда атом не содержит ни одного символа (так называемый 'нулевой атом') или содержит непечатае­мые символы.

Примеры: <имя константы>=<значение>. Имя константы должно быть идентификатором. Каждое определение константы должно размещаться в отдельной строке.

food=”мясо

pi=3.1415…

null=0

bgi_path="c:\\prolog\\bgi"

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

2. Домены

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

integer - целое число (из промежутка -32768...32767);

real - действительное число (лежащее между ±1e-307...±1e308);

char - символ, заключенный в одиночные апострофы;

string - последовательность символов, заключенная в двойные кавычки;

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

file - файл.

В разделе объявляются нестандартные, пользовательские домены. Объявление домена имеет следующий вид:

<имя домена>=<определение домена>

или

file=<имя файлового домена1>;...;<имя файлового доменаN>

<имя спискового домена>=<имя домена элементов списка>*

Например:

int=integer, list=integer*

Структура:

point = p(integer, integer)

triangle = tr(point, point, point)

В описание структуры могут входить альтернативы, разделенные символом ";" или ключевым словом "or".

point = p(integer, integer);p(integer, integer, integer).

3. Раздел predicates

В прологе есть встроенные предикаты (write(Х), window(Х)…). Список встроенных предикатов приведен в приложении методички. Например, если программист определяет в разделе clauses свой собственный предикат, то он ДОЛЖЕН объявить его в разделе predicates. В противном случае ТП не будет знать, о чем идет речь. Когда объявляется предикат, Турбо-Прологу сообщается о том, к каким доменам принадлежат аргументы этого предиката. В разделе predicates программы просто перечисляется каждый предикат со своими аргументами. Имя предиката должно начинаться с буквы; после этой буквы могут следовать буквы, цифры и символы подчеркивания. Величина букв значения не имеет, но все-таки не рекомендуется использовать в качестве первой буквы заглавную. Можно объявлять несколько предикатов с одним и тем же именем, но разным числом аргументов или аргументами разных типов. Например:

man(string)

man(string,string)

arg(integer,integer,integer)

arg(real,real,real)

4 Clauses.

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

somth(Х,1):-Х>0.

somth (Х,0):-Х = 0.

somth (Х,-1):-Х<0.

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

В теле правила его составные части соединяются «,» или служебным словом and (если соединены конъюнктивно) или «;» или служебным словом or если соединены дизъюнктивно).

can_buy(Х,У):-man(Х), car(У), for_sail(У).

eq(Х,У):-А=sqrt(Х), У=А+1.

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

GOAL

write("hello world!"),readchar(_).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]