- 167 -
недетерминированные предикаты. Существуют два вида
недетерминированных предложений:
− если предложение не содержит отсечение и существует более одного
предложения, которые могут соответствовать одинаковым значениям
входных аргументов для некоторого потока параметров;
− если предложение вызывает недетерминированный предикат и за
этим вызовом предиката не следует отсечение.
Из-за второй причины недетерминизм имеет тенденцию быстро
распространяться по программе, если его не пресечь (буквально) одним или
более отсечениям.
По умолчанию, компилятор проверяет определенные пользователем
предикаты с ключевыми словами procedure, multi и erroneous, и выдает
предупреждения/ошибки, если не может гарантировать, что предикат
никогда не завершается отказом (fail).
Реализация рекурсивных структур данных в Прологе
В Прологе циклические вычисления организуются при помощи
рекурсии. Она обычно применяется в ситуациях, когда число возможных
решений заранее неизвестно, либо, когда обрабатываются структуры данных
с произвольным количеством элементов.
Правила логического программирования чрезвычайно выразительны,
поскольку наличие логических переменных и логических связей между
атомами делаѐт возможным не конкретное описание предметной области.
Это, в конечном счѐте, влияет на расширенные возможности представления
знаний.
Используя рекурсивные правила, т.е. правила, в теле которых может
встречаться атом, предикатный символ которого использован в заголовке
правила, можно в виде отношения представить процедурные знания из
предметной области.
Ранее были рассмотрены правила, определяющие новые отношения в
терминах существующих отношений. Важным расширением подобных
правил являются рекурсивные определения, в которых отношения
определяются в терминах этих же отношений.
Рекурсия – это алгоритмический метод, часто используемый в Прологе
для достижения такого же эффекта, которые реализуется при употреблении
итеративных управляющих конструкций в процедурных языках.
Один из способов перехода к рекурсивным правилам состоит в
обобщении не рекурсивных правил:
1) предок(предок, потомок):- родитель(предок, потомок).
2) предок(предок, потомок):- предок(предок, человек), предок(человек,
потомок).
3) предок(предок, потомок):- предок(предок, человек1),
предок(человек1, человек2), предок(человек2, потомок).