Объекты и типы данных в ПРОЛОГе


Переменные в ПРОЛОГе

Знает (лена, Х), знает (саша, Х).

Запросы

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

Запросы с константами позволяют получить один из двух ответов: “да” или “нет”

Например, имеются факты:

знает (лена, таня).

знает (лена, саша).

знает (саша, таня).

а) Знает ли Лена Сашу?

запрос: знает (лена, саша).

Результат: yes

б) Знает ли Таня Лену?

запрос знает (таня, лена).

Результат: no

Если в запрос входит переменная, то интерпретатор пытается найти такие ее значения, при которых запрос будут истинным.

а) Кого знает Лена?

запрос: знает (лена, Х).

Результат:

Х = таня

Х = саша

б) Кто знает Сашу?

запрос: знает (Х, саша).

Результат: Х = лена

Запросы могут быть составными, т.е. состоять из нескольких простых запросов. Они объединяются знаком “,“, который понимается как логическая связка “и”.

Простые запросы называются подцелью, составной запрос принимает истинное значение тогда, когда истинна каждая подцель.

Для ответа, есть ли общие знакомые у Лены и Саши, следует составить запрос:

Результат:

Х = Таня

Переменная в ПРОЛОГе не рассматривается как выделенный участок памяти. Она служит для обозначения объекта, на который нельзя сослаться по имени. Переменную можно считать локальным именем для некоторого объекта.

Имя переменной должно начинаться с прописной буквы или символа подчеркивания и содержать только символы букв, цифр и подчеркивания: Х, _у, АВ, Х1. Переменная, не имеющая значения, называется свободной, переменная, имеющая значение – конкретизированной.

Переменная, состоящая только из символа подчеркивания, называется анонимной и используется в том случае, если ее значение несущественно. Например, имеются факты:

родитель (ира, таня).

родитель (миша, таня).

родитель (оля, ира).

Требуется определить всех родителей

Запрос: родитель(Х, _)

Результат:

Х = Ира

Х = Миша

Х = Оля

Областью действия переменной является утверждение. В пределах утверждения одно и то же имя принадлежит одной и той же переменной. Два утверждения могут использовать одно имя переменной совершенно различным образом.

В ПРОЛОГе нет оператора присваивания, его роль выполняет оператор равенства =. Цель X=5 может рассматриваться как сравнение (если переменная X имеет значение) или как присваивание (если переменная X свободна).

В ПРОЛОГе нельзя для увеличения значения переменной записать X=X+5. Следует использовать новую переменную: Y=X+5.

Объекты данных в ПРОЛОГе называются термами. Терм может быть константой, переменной или составным термом (структурой). Константами являются целые и действительные числа (0, -l, 123.4, 0.23E-5), а также атомы.

Атом – любая последовательность символов, заключенная в кавычки. Кавычки опускаются, если строка начинается со строчной буквы и содержит только буквы, цифры и знак подчеркивания (т.е. если ее можно отличить от обозначения переменных). Примеры атомов:

abcd, “a+b”, “студент Иванов”, пролог, “Пролог”.

Структура позволяет объединить несколько объектов в единое целое. Она состоит из функтора (имя) и последовательности термов.

Например, data (15, апрель, 1983)

data – функтор, (15, апрель, 1983) – термы

Число компонент в структуре называется арностью структуры: data/3.

Структура может содержать другую структуру в качестве одного из своих объектов.

день_рождения (person(“Маша”,”Иванова”), data(15,апрель,1983))

Доменом в ПРОЛОГе называют тип данных. Стандартными доменами являются:

integer – целые числа.

real – вещественные числа.

string – строки (любая последовательность символов, заключенная в кавычки).

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

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