Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ОТС / promet.pdf
Скачиваний:
95
Добавлен:
23.02.2015
Размер:
683.47 Кб
Скачать

1

X = X'

человек(X'), грек(X '), write(X ')

2

X' = "Тьюринг"

грек("Тьюринг"), write("Тьюринг")

 

Неудача при совмещении для грек(…) с возвратом

3

X ' = "Сократ"

грек("Сократ"), write("Сократ")

4

write("Сократ")

При записи программ и анализе доказательства следует учиты­ вать то, что одноименные переменные в различных предложениях (клозах) независимы и различны (смотри строку 2 в табл. 1), что следует из локальности области действия кванторов общности и не­ зависимости аксиом друг от друга.

4.ЯЗЫК ПРОЛОГ

4.1.Объявления

Система Turbo-Prolog является инструментальным средством и средой для написания и отладки программ на Прологе. В системе используется версия языка с предварительными описаниями всех объектов: доменов, предикатов в программах и в базах данных. В системе SWI-Prolog предварительных объявлений не требуется. Все необходимые сведения об объектах извлекаются из контекста про­ граммы. Имена используются для обозначения символических констант, предикатов и переменных. Имена содержат символы ла­ тинских букв, цифры и знак подчеркивания "_". Имена констант, пре­ дикатов и других объектов должны начинаться со строчной буквы. В языке предопределены имена ключевых слов, операций, стандарт­ ных предикатов, переопределение которых либо недопустимо, либо крайне нежелательно.

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

Объявления доменов начинаются с ключевого слова "domains" и содержат строки с описанием одного или нескольких имен доме­ нов вида :

<имя>[, <имя>, ...] = <тип>.

Тип значений домена может задаваться ссылкой на стандартные домены integer, real, char, symbol, string, указателем списка вида <тип>* , перечнем составных или простых объектов вида

f1(d11, ... , d1n); f2(d21, ... , d2m); ... ; fq(dq1, ... , dqk).

В этом же разделе описываются файлы: file = <имя1>; <имя2>;...; <имяn>.

Пример: domains

person, act = symbol age, hrice = integer company = person*

rel = pair(integer,integer); singl(integer); none namelist = symbol*

Глобальные домены и предикаты используются для разработки модульных программ и будут рассмотрены позднее. Описание баз данных начинается с ключевого слова "database" и содержит объяв­ ление предикатов, поиск которых следует вести не в тексте про­ граммы, а в базе данных, создаваемой при исполнении программы. Для наполнения и ведения базы данных имеются стандартные пре­ дикаты, рассматриваемые ниже.

Пример: database

who_is(person, age, string) value(symbol, rel)

Объявления предикатов начинаются с ключевого слова "predicates" и описывают количество и типы параметров, использу­ емых в программе предикатов. Turbo-Prolog требует описания всех предикатов, кроме стандартных, предопределенных в системе. Объ­ явление предиката имеет вид :

<имяпредиката>(<имядомена1>,...,<имядоменаn>)

Примеры : Predicates

doit(person, integer, string) start like(company) long_text(string*)

Цель, если она задана в тексте программы, описывается с клю­ чевым словом "goal" и включает список предикатов с параметрами, являющийся формулировкой теоремы. Список предикатов цели за­ канчивается символом "." – точка.

Примеры: goal start.

goal doit(X, 34, "Технический университет"), write(X).

Телом программы являются аксиомы или факты, оформленные в виде предложений или клозов, следующих за ключевым словом "clauses". Описание клоза содержит левую и правую части, соответ­ ствующие "плюс-" и "минус-части" аксиомы. Вместо разделителя ча­ стей ":–" можно использовать ключевое слово "if", вместо "," – "and".

Пример: clauses

doit(Who, Age, Work) :– write("Введи имя : "), readln(Who),search(Who, Age, Work).

doit(_, _, _) :– write("Нет информации !!!"), nl.

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

В любом месте программы, где уместно употребление раздели­ теля, можно разместить комментарий, начинающийся символами "/*" и заканчивающийся символами "*/" . Например:

/***********************************************/ /* Это пример комментария */ /***********************************************/

В отличие от системы Turbo-Prolog в SWI-Prolog программа со­ держит только объявления цели и аксиом (клозов). Цель задается предложением вида

:– <предикат>, … , <предикат>.

Объявления аксиом имеют аналогичный языку Turbo-Prolog вид. Программы на языке Пролог записываются и хранятся в отдель­

ных файлах и вызываются для компиляции и исполнения. В TurboProlog это делается командами меню, в SWI-Prolog – предикатом

Соседние файлы в папке ОТС