Следует отметить, что в языке Пролог рекурсия является одним из основных методов управления программой. В общем случае рекурсивное определение содержит следующие группы предикатов: 1) предикаты, определяющие нормальный выход из рекурсии, их успешное или безуспешное выполнение не приводит к рекурсивным обращениям; 2) предикаты, работающие на входе в рекурсию, в случае отказа осуществляется прекращение рекурсии; 3) непосредственно рекурсивное обращение; 4) предикаты, не оказывающие непосредственного влияния на рекурсию, в процессе рекурсивных обращений они «выталкиваются» в стек и выполняются лишь по завершении рекурсии. Следует обратить внимание на условие выхода из рекурсии. Рекурсивное правило всегда должно содержать этот предикат. Рассмотрим использование рекурсивных определений на примере вычисления n!:
factorial(N, 1):– N<=1, !.
Условие выхода из рекурсии
factorial(N, S):–
Рекурсивное правило
N1= N-1,
Предикат, успешное выполнение которого приводит к рекурсии, а отказ– к выходу