Раздел domains в пролог программе это

2. list = element *, где list – список элементов element , element – элемент, лписанный в разделе domains или один из стандартных типов, * — список.

3. num 1= f 1 ( d 11, …, d 1 M ); f 2 ) d 21, …, d 2 N ) Тип num1 включает сложные объекты, которые объявляются путем установления пунктора и описаний всех входящих в него компонент. collection = book ( author , title ) record ( artist , album , type ). Один оператор раздела domains описысвает только один уровень дерева. books = book ( title , author ( name , surname )) – неверно.

4. file = name1; name2; … Используется для обращения к файлам по символическим именам. В разделе domains может быть тоько один оператор этого типа. Симолические имена файлов, если их несколько, задаются в качестве альтернативы.

Раздел predicates

Предикат (отношение) – в общем случае эта стуктура выглядит так:

predname ( comp 1, …, compN ), где predname – имя предиката, comp 1, …, compN – имя компонент.

den, god = integer

Урок 2. Простая программа на Visual Prolog

anketa (fio, den, mes, god)

Если в предикатах испоьзуется только стандартные типы данных, то раздел domains может отсутствовать.

anketa (string, integer, symbol, integer)

Предикат может состоять только из одного имени, то есть не иметь компонент. Допускается многократное объявление предиката с одним и тем же именем. Альтернатива необяазтельно должна иметь одинаковое число компонентов.

Раздел clauses

Здесь размещаются предложения (утверждения). Они представляют собой факт ил правило, соответствующее одному из объявленных предикатов. Факт – простейший вид утверждения, который устанавливает отношения между объектами.

anketa (» Иванов ”, 8, august, 1958).

Переменная означает один и тот же объект только в пределах одного правила.

Раздел goal

Записывается третий тип предложения, состоит из одного или нескольких целевых утверждений, разделенных «,» и оканчивающихся «.». Пролог система, рассматривает вопросы как цели, к которы нужно стремиться . Ответ на вопрос оказывается или положительным или отрицательным в зависимости от того, может быть цель достигнута или нет.

Читайте также:
Программа для просмотра модели в кс

Если на вопрос существует несколько ответов, то система может найти и выдать все из них. В разделе goal может быть только один вопрос, на который будет выдано только одно решение. Для получения всех решений можно удалит цель из из программы и задать цель на подсказку ТП в окне. Применение внешних целей бывает полкзно при записи коротких вопросов, а также для получения всег набора допустимых значений.

Источник: prolog.ucoz.com

Раздел доменов

Домены позволяют задавать разные имена различным видам данных, которые, в противном случае, будут выглядеть абсолютно одинаково. В программах Visual Prolog объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные пользователем специальные домены. Раздел domains служит двум полезным целям. Во-первых, можно задать доменам осмысленные имена, даже если внутренне эти домены аналогичны уже имеющимся стандартным. Во-вторых, объявление специальных доменов используется для описания структур данных, отсутствующих в стандартных доменах.

Лекция

Иногда очень полезно описать новый домен — особенно, когда вы хотите прояснить отдельные части раздела predicates. Объявление собственных доменов, благодаря присваиванию осмысленных имен типам аргументов, помогает документировать описываемые вами предикаты. Рассмотрим пример, показывающий, как объявление доменов помогает документировать предикаты:

Франк — мужчина, которому 45 лет.

Используя стандартные домены, вы можете так объявить соответствующий предикат:

person(symbol, symbol, integer).

В большинстве случаев такое объявление будет работать хорошо, но не наглядно для чтения программы. Более правильным было бы следующее описание:

name, sex = symbol

person(name, sex, age)

Одним из главных преимуществ объявления собственных доменов является то, что Visual Prolog может отслеживать ошибки типов, например, такие:

Несмотря на то, что и name и sex описываются как symbol, они не эквивалентны друг другу. Это и позволяет Visual Prolog определить ошибку, если вы перепутаете их. Это полезно в тех случаях, когда ваши программы очень велики и сложны.

Читайте также:
Что такое риппер программа

Аргументы с типами из специальных доменов не могут смешиваться между собой, даже если эти домены одинаковы.

Следующий пример программы при его загрузке приведет к ошибке типа.

Domains product, sum = integer

add_em_up(X, Y, Sum):-Sum=X+Y.

Эта программа выполняет две операции: складывает и умножает. Зададим ей следующую цель:

add_em_up(32, 54, Sum) .

Visual Prolog (Test Goal) ответит:

что является суммой двух целых чисел, которые вы передали в программу.

С другой стороны, эта же программа с помощью предиката multiply_em умножает два аргумента. Допустим, мы хотим удвоить произведение 31 на 17. Задаем следующую цель:

multiply_em(31, 17, Sum), add_em_up(Sum, Sum, Answer).

и ждем, что Visual Prolog (Test Goal) ответит:

Однако вместо этого вы получите ошибку типа. Это случилось из-за того, что имела место попытка передать результирующее значение предиката multiply_em, которое относится к домену product, в качестве первого и второго аргументов (которые должны относится к домену sum) в предикат add_em_up. И хотя оба эти домена соответствуют типу integer — это различные домены.

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

Источник: studentopedia.ru

Домены в Прологе. Типы доменов Пролога

В целях упрощения организации фактов и правил Пролог поддерживает составные доменные структуры. Кирпичиками для их создания служат базисные типы доменов Пролога. Можно создать составные объекты и доменные структуры на основе этих базисных типов.

В предикате likes(mary,apples), likes является предикатом (термом предиката), а mary и apples — объектами предиката. Пролог требует указания типов объектов для каждого предиката программы в разделе predicates. Некоторые из этих объектов могут быть, к примеру, числовыми данными, другие же — символьными строками.

Если используются стандартные базисные типы доменов в Прологе (Prolog), то нет необходимости отдельно описывать домены объектов этих утверждений. Тогда объекты предикатов определяются при описании этих правил в разделе программы predicates.

Читайте также:
Как отменить программу самоуничтожения

predicates book(symbol, symbol, integer) clauses book(“Tom Sawyer”,”Mark Twain”,1855).

Иногда необходимо несколько больше конкретизировать тип используемого предикатом объекта. Например, в примере ниже в предикате likes объекты имеют смысл «тот, кто любит» и «вещь, которую любят».

predicates likes(symbol,symbol) clauses likes(mary, apples). likes(beth, X) if likes(mary, X).

Пролог (Prolog) позволяет конструировать свои собственные типы объектов из базисных типов доменов.

Предположим, что объектам предиката likes вы хотите присвоить соответственно имена person и thing. Тогда в разделе программы domains должны появиться такие описания:

domains person, thing = symbol /* типы полей БД */ predicates likes(person, thing) /* названия полей БД */

Имена person и thing при этом будут обозначать некие совокупности (домены) значений.

Любое значение доменов person и thing может в утверждениях занимать место объектов person и thing из соответствующего предиката. Рассмотрим, например, такие три утверждения:

/* Конкретные значения в БД */ likes(john, camera). likes(tom, computer). likes(kathy, computer).

Person (домен) Thing (домен)
john camera
tom computer
kathy computer

Термы john, tom и kathy принадлежат здесь к домену person, а термы camera и computer — к домену thing. Все три утверждения относятся к одному и тому же предикату — likes. Отличие состоит лишь в значениях, которые принимают объекты. Другими словами, все три утверждения являются вариациями одного и того же предиката.

Если в Прологе (Prolog) необходимо явно описать все домены объектов, используемые предикатами, то в разделах domains и predicates в этом случае должны появиться следующие предложения:

domains title,author = symbol year = integer predicates book(title, author, year) clauses book(“Tom Sawyer”,”Mark Twain”,1855).

В этом случае, факты становятся элементами базы данных, поля которой имеют имена (title,author,year).

Типы доменов Пролога

Пролог имеет 6 встроенных типов доменов:

Источник: verim.org

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru