Скачиваний:
16
Добавлен:
01.05.2014
Размер:
1.51 Кб
Скачать
Рекурсия.
Рекурсивный вызов - это функтор того же вида, что и
определяемый функтор (т.е. унифицируемый с определяемым
функтором); находящийся в теле правила, заголовком
которого является определяемый функтор.

Пример:

list([_|T]):-list(T). Здесь list(T) - рекурсивный вызов.
Свойства рекурсии.
1).Рекурсия - это средство обработки списков.
2).Обрабатываемый список всегда разбивается на голову и
хвост.
3).Любая рекурсия всегда определяется через саму себя,
причём рекурсивный вызов всегда обрабатывает хвост
списка.
4).При этом считается, что рекурсивный вызов уже
определён (потому что ЛЮБАЯ рекурсия "опирается" на
нерекурсивное правило (на конечном шаге выполнения).

Фундаментальное свойство структуры любой рекурсии.

Любая рекурсия в рекурсивном вызове обрабатывает
ХВОСТ(Ы) исходного списка(списков).

Общие правила построения рекурсии.

1). Общий принцип построения рекурсии - сразу построить
рекурсивный вызов (хотя бы его черновой вариант)- а он
подскажет вид правила-ловушки.
2). Исходный список всегда разбивается на голову и хвост.
3). Создаётся рекурсивное правило - так, чтобы оно в ходе
выполнения привело к правилу-ловушке. При этом
считается, что оно как бы уже определено.
4). Создаётся правило-ловушка (т.е. нерекурсивное).
5). Голова списка обрабатывается тем или иным образом -
но не рекурсивно.
6). При необходимости используются вспомогательные
предикаты.