КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Правила программирования в системе Prolog
В разделе константы объявляются используемые в программе константы. В разделе домены объявляются местные типы данных для переменных, используемых в качестве аргументов предикатов. В Prolog’е объявление типа данных доменом с конкретным местным предикатом осуществляется в разделе предикаты. Домен описывает множество значений, которые может принимать переменная предиката в ходе выполнения программы. Домены подразделяются на простые и структурированные, стандартные и нестандартные. К стандартным доменам относятся: symbol – длина не более 250 символов, имеет две формы записи: последовательность букв, цифр, знаков подчёркивания, начинающиеся со строчной буквы; и последовательность символов, заключённая в двоичные кавычки. string – строка символов: любая последовательность символов, заключённая в двойные кавычки. char – отдельный символ, заключенный в апострофы. integer – целое число в диапазоне от –32768 до 32767. real – действительное число, допускается обычная и экспоненциальная форма записи, значение экспоненты должно быть от е-307 до е308.
Объявление новых доменов с использованием стандартных имеет вид:
<Имя>=<Имя стандартного домена>,
Примеры объявлений:
domains a = integer fas = symbol ret, das = real
Такие объявления новых доменов улучшают читабельность программы и обеспечивают контроль типов значений переменных – смешивать в ходе выполнения программы переменные разных типов (доменов) нельзя. Кроме стандартных видов доменов, Turbo Prolog допускает использование структуры домена, состоящей из нескольких простых или сложных объектов. Объявление структуры имеет следующий вид: <структура> = <имя структуры> (<D1> <D2>…<Dn>) Здесь <имя структуры> называется функтором, а домены <D1>,<D2>,…, <Dn> – это либо простые домены, либо имена ранее объявленных доменов, либо, в свою очередь, структуры. Структуры позволяют сортировать объекты по категориям. Ссылки на доменную структуру осуществляются по имени функтора. В одном объявлении можно описать несколько альтернативных вариантов структуры, разделяя варианты точкой с запятой или служебным словом or. Примеры объявления структур:
domains d1, d2, d3 = symbol fr = fruits (d1,d2,d3); pot (d1)
Один и тот же предикат может иметь различное число аргументов, такие предикаты объявляются для каждого варианта отдельно. В программе допускается использовать не более 300 предикатов, число аргументов у предиката не должно превышать 50. Примеры объявления предикатов:
predicates add (integer, integer, integer) ek (fk) ek (d1, d2)
В разделе database описываются предикаты динамической базы данных. Перечисленные здесь предикаты, после подстановки в них вместо переменных констант (т.е. превращение их в факты), могут быть перемещены и, если потребуется, удалены во время выполнения программы в динамическую базу данных. делается это с помощью стандартных (встроенных в систему) предикатов assert, asserta.
В разделе clauses описываются утверждения, каждое из которых является правилом или фактом. В конце каждого утверждения ставится точка. Факт состоит из имени предиката и заключённого в скобки списка аргументов - констант. Правило состоит из заголовка – предиката, объявленного в разделе predicates, за которым следует сперва двоеточие с дефисом (:-), а потом список вызовов предикатов (пользовательских и/или стандартных), разделенных запятыми или точками с запятой. Вместо двоеточия с дефисом можно использовать ключевое слово if, вместо запятой – ключевое слово and, вместо точки с запятой – ключевое слово or. Правила и факты, имеющие в качестве заголовка один и тот же предикат, должны быть сгруппированы в рамках одного блока, т.е. следовать в программе друг за другом. Предикаты во время исполнения Prolog-программы могут находиться в двух состояниях: конкретизированном или свободнном (неконкретизированном). Переменная является свободной, если ей не присвоено значение, в противном случае переменная является конкретизированной. В теле правила кроме объявленных в программе предикатов, могут использоваться стандартные предикаты и операции сравнения. Стандартные предикаты выполняют разнообразные функции по вводу-выводу, работе с файлами, выполнению функций DOS, обработке строк, поддержке графического режима, обеспечение интерфейса с другими системами программирования. Описание основных стандартных предикатов Turbo Prolog рассматривается ниже. В правилах можно использовать следующие основные операции сравнения: - < меньше - > больше - <= меньше или равно - >= больше или равно - = равно - <>, >< не равно Для сравнивания между собой выражений и переменных. Операция = (равно) устанавливает соответствие между выражениями правой и левой частей предиката Х=У. Предикат этот записан в привычной инфиксной форме. В процессе согласования переменных используются следующие соглашения: 1. Если Х – свободная переменная, а У – конкретизированная, то при записи Х=У переменная Х станет конкретизированной и получит значение, равное У. 2. Целые числа и строки всегда равны самим себе. 3. Две структуры равны, если они имеют одинаковые функторы, одинаковое число параметров, и все соответствующие параметры равны между собой. 4. Если имеется запись вида Х=У и обе переменные свободны, то они становятся сцепленными и при конкретизации одной из них, вторая автоматически будет означена тем же значением. Раздел goal содержит запрос в программе, называемый внутренним. Для внутреннего запроса Prolog осуществляет поиск только первого подходящего решения. При этом система не сообщает о результатах найденного решения (успешное или нет). Полученные при сопоставлении значения переменных, входящих в предикаты запроса, так же не отображаются на экране. Эти действия должен запрограммировать программист с использованием стандартных предикатов для вывода данных. Раздел описания целей (goal) в компилируемой программе может отсутствовать, тогда в диалоговом окне после запуска программы на выполнение можно ввести внешний запрос. При использовании внешнего запроса, Turbo Prolog отыскивает все варианты решений и в этом же окне выводятся значения переменных предикатов запроса и сообщение об успешном или неуспешном решении.
Примеры: 1). Иванов – студент математического факультета. Студент (“Иванов”, математический факультет). 2). Земля имеет форму шара. Имеет (“Земля”, форма_шар). х = “Земля” ?Имеет (“Земля”, у) у = форма_шар.
Дата добавления: 2014-01-05; Просмотров: 408; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |