Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Арифмети ческие операции в языке 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; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.036 с.)
Главная | Случайная страница | Обратная связь