Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Арифмети ческие операции в языке PROLOG
В прологе выполняются следующие операции: +, -, *, /, mod, div. Чтобы арифметическое выражение рассчитывалось, необходимо использовать встроенный оператор is, который заставляет выполнять арифметические операции. Пример: X is 4+3*2. Однако в среде Turbo Prolog оператор сопоставления is отсутствует, вместо него сопоставление производится с помощью операции = (сравнение), когда одним из операндов выступает неконкретизированная переменная, а вторым – арифметическое выражение. Операции сравнения. Для чисел: >, <, =>, <= Для всех: =, \= Типы предложений в языке PROLOG Простейшим типом предложения является факт. Факт – это безусловно истинное утверждение Пролог-программы. Факт записывается в виде предиката с точкой на конце. Пример: часть(двигатель, автомобиль). земля_круглая. parent(tom, bob). Вторым типом предложений Пролога является вопрос или цель. Цель – это средство формулировки задачи, которую должна решать программа. Простой вопрос (цель) синтаксически является разновидностью факта. Пример: цель: мать (мария, юлия). Имена написаны с маленькой буквы, т.к. это константы. В данном случае программе задан вопрос, является ли мария матерью юлии. Если необходимо задать вопрос, кто является матерью юлии, то цель будет иметь следующий вид: Цель: мать( X, юлия). Сложные цели представляют собой конъюнкцию простых целей и имеют следующий вид: Цель: Q1, Q2,…,Qn, где запятая обозначает операцию конъюнкции, а Q1, Q2,…,Qn – подцели главной цели. Конъюнкция в Прологе истинна только при истинности всех компонент, однако, в отличие от логики, в Прологе учитывается порядок оценки истинности компонент (слева направо). Пример: Пусть задана семейная БД при помощи перечисления родительских отношений в виде списка фактов: мать(мария, анна). мать(мария, юлия). мать(анна, петр). отец(иван, анна). отец(иван, юлия). Тогда вопрос, является ли иван дедом петра по материнской линии, можно задать в виде следующей цели: Цель: отец(иван, X), мать(X, петр). Третьим типом предложения является правило. Правила – это предложения вида H :- P1, P2,…, Pn. Символ «:-» читается как «если», предикат H называется заголовком правила, а последовательность предикатов P1, P2,…, Pn называется телом правила. Предикаты P1, P2,…, Pn часто называют посылками. Заголовок следует из тела правила. Заголовок истинен, если истинны все посылки в теле правила. Если в программе встречается несколько правил с одинаковым заголовком, то это называется процедурой (правила в процедуре связаны по «или»). Пример: a:-b3, b4. a:-b1, b2. мать(мария, анна). мать(мария, юлия). мать(анна, петр). отец(иван, анна). отец(иван, юлия). дед(X, Y):- отец(X, Z), мать(Z, Y). дед(X, Y):- отец(X, Z), отец(Z, Y). Тогда вопрос, является ли иван дедом петра, можно задать в виде следующей цели: Цель: дед(иван, петр). Очень часто правила в Прологе являются рекурсивными. Например, для нашей семейной БД предикат «предок» определяется рекурсивно: предок(x, y): - мать(x, y). предок(x, y): - отец(x, y). предок(x, y): - мать(x, z), предок(z, y). предок(x, y): - отец (x, z), предок(z, y). В среде Turbo Prolog программа имеет более явно описанную структуру, выражаемую заголовками разделов, обычно следующих в следующем порядке: domains /* определение типов данных */ global domains /* определение глобальных типов данных */ database /* определение предикатов динамической базы данных */ predicates /* определение предикатов */ global predicates /* определение глобальных предикатов */ clauses /* определение фактов и правил */ goal /* определение цели */ Минимально необходимыми разделами являются predicates и clauses. Раздел goal может находиться после или перед разделом clauses. Цель может состоять из нескольких подцелей. Если программа разрабатывается для работы в «пакетном» режиме, а не диалога с Пролог-системой, раздел goal не может быть опущен. Унификация переменных. Унификация – процесс сравнения набора условий, содержащихся в правиле, с заданными условиями, содержащимися в базе данных. Установление соответствия между термами является основной операцией при вычислении цели. Она осуществляется следующим образом: на каждом шаге выбирается очередной терм и отыскивается соответствующее выражение в БД. При этом переменные получают или теряют значения. Этот процесс можно описать в терминах текстуальных подстановок: «подставить терм t вместо переменной Y». Свободными переменными в Прологе называются переменные, которым не были присвоены значения, а все остальные переменные называются связанными переменными. Переменная становится связанной только во время унификации, переменная вновь становится свободной, когда унификация оказывается неуспешной или цель оказывается успешно вычисленной. В Прологе присваивание значений переменным выполняется внутренними подпрограммами унификации. Переменные становятся свободными, как только для внутренних подпрограмм унификации отпадает необходимость связывать некоторое значение с переменной для выполнения доказательства подцели. Правила унификации. 1. Если x и y-константы, то они унифицируемы, только если они равны. 2. Если x- константа или структура, а Y-переменная, то они унифицируемы, при этом Y принимает значение x . 3. Если x и y – предикаты, то они унифицируемы тогда и только тогда, когда у них одинаковые имена (функторы) и набор аргументов и каждая пара аргументов унифицируемы. Пример: Следующие предикаты унифицируемы a(b, C, d(e, F, g(h, i, J))) и a(B, c, d(E, f, g(H, I, j))) при этом B=b, C=c, E=e, F=f, H=h, I=I, J=j. Пример: Следующие предикаты унифицируемы triangle(point(X, 5), point(X, 8), point(5, Z)) triangle(point(2, 5), point(Y, 8), point(5, A)) При этом X=2, Y=2, а переменные Z и A – неконкретизованы, но становятся сцепленными. Если две переменные сцеплены, то при конкретизации одной из них, второй переменной автоматически будет присвоено то же самое конкретное значение, что и первой. В прологе операция = кроме сравнения выполняет сопоставление двух термов, с конкретизацией переменных. Если термы согласуются, то результат истина. Пример: ?- a(B,c(x,D))=a(d,c(X,3)). Yes B=d X=x D=3 Аналогично, /= дает истину, если термы не согласуются. Пример: ?-a(x)/=a(d). Yes Предикат not (отрицание) Предикат not (<утверждение>) успешен, если утверждение ложно. |
Последнее изменение этой страницы: 2019-06-20; Просмотров: 193; Нарушение авторского права страницы