Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FLP-Questions.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
110.08 Кб
Скачать

1Равенство в Прологе.

В Прологе существует особый предикат равенство, являющийся инфиксным оператором, обозначаемым литерой '='. Когда делается попытка доказать согласованность с базой данных целевого утверждения

?- X = Y.

(произносится X равно Y), Пролог пытается установить соответствие между X и Y ; целевое утверждение «доказуемо», если такое соответствие имеется. Это действие можно представить себе как попытку сделать X и Y равными. Предикат равенства является встроенным, т. е. он уже определен в Пролог-системе. Предикат равенства работает так, словно определен следующий факт: X = X.

Внутри всякого утверждения X всегда равно X , и это свойство использовано нами при определении предиката равенства.

При согласовании с базой данных цели вида X = Y , где X и Y – любые термы, в которых могут содержаться неконкретизированные переменные, действуют следующие правила:

• если X представляет собой неконкретизированную переменную, а переменная Y конкретизирована (какое именно значение ей дано, неважно), то X и Y равны. Кроме того, X станет конкретизированной – ей будет дано то же значение, что и Y .

2Встроенные предикаты. Предикаты взаимодействия.

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

В описании встроенных аргументов (built—in argument) операция выполняется согласно следующему правилу, символ “+” перед обозначает исходный аргумент, “-” обозначает итоговый аргумент, “?” обозначает исходный или итоговый аргумент, “@” обозначает исходный аргумент, который должен быть несвободным (связанным).

4Аппарат вычислений. Обработка списков.

Список — это тип данных, представляющих собой набор значений. Как и другие не стандартные типы, список в прологе объявляется в разделе domains. В прологе, список может содержать значения лишь одного типа, этот тип указывается при объявлении типа списка. Для помещения чисел в список, их необходимо ограничить квадратными скобками и разделить запятыми. При обработке, список разделяется на голову(первый элемент списка) и хвост(все элементы, кроме первого), отделяя таким образом элементы, можно обойти весь список. Для отделения головы списка используется символ вертикальной черты.

Проверяет принадлежность элемента списку. member(X, L)

Используется для соединения двух списков. т.е append (L1, L2, L3)

Можно, используя рекурсивный вызов, легко посчитать длину списка: length([], 0). ?-length([a, b, c], N). N=3

5Аппарат вычислений. Рекурсивные определения в Прологе.

Рекурсивное определение в программе также делится на две части. Одна из них соответствует рекуррентным формулам и состоит из правил, в теле которых присутствует целевое утверждение с тем же предикатом, что и заголовок правила, т.е. из правил, рекурсивно вызывающих самих себя. Другая часть содержит утверждения, описывающие терминальную ситуацию, т.е. ситуацию, в которой рекурсивное обращение предиката к самому себе прекращается. В качестве терминальной ситуации выбирается одно из граничных условий. Обычно терминальная ситуация является первым утверждением в определении. В этом случае вот что происходит при выполнении (см. пример 1):

• оценивается первое утверждение в рекурсивном определении;

• если первое утверждение не выполняется, осуществляется переход к следующему в определении утверждению, и оно оценивается. Обычно это правило, которое содержит условие, начинающее рекурсию;

• после прохождения первого уровня рекурсии выполнение возвращается к первому утверждению в определении и опять оценивается его истинность;

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

В зависимости от того, как осуществляется переход от соотношений (1) к программе, различают два разных стиля рекурсивных определений: нисходящая рекурсия и восходящая рекурсия.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]