Лучшие вопросы
Таймлайн
Чат
Перспективы
Корекурсия
Из Википедии, свободной энциклопедии
Remove ads
Кореку́рсия — в теории категорий и информатике тип операции, дуальный к рекурсии. Обычно корекурсия используется (совместно с механизмом ленивых вычислений) для генерации бесконечных структур данных.
Общие замечания
Правило использования корекурсии на коданных дуально правилу применения рекурсии на данных. Вместо свёртывания структуры данных с использованием результата рекурсивно полученного на основе значения для базисного случая, корекурсия развёртывает результат на основе начального значения. Корекурсия создаёт потенциально бесконечные структуры данных, в то время как обычная рекурсия анализирует (разбирает) по необходимости конечные структуры данных. Обычная рекурсия неприменима к коданным, поскольку процесс анализа может никогда не остановиться. Соответственно, корекурсия не может производить данные, поскольку данные всегда конечны; но каждый частичный результат продуктивной корекурсии конечен и может быть интерпретирован как данные.
Remove ads
Примеры
Пример использования механизма корекурсии на языке Haskell (вычисление бесконечного списка чисел Фибоначчи):
fibs = 0 : 1 : next fibs
where
next (a:b:c) = (a+b) : next (b:c)
Другой пример — вычисление бесконечного списка простых чисел:
primes = next [2..]
where
next (x:xs) = x : next [ y | y <- xs, rem y x /= 0 ]
Данная функция (неэффективно) реализует алгоритм «Перебор делителей».[1]
Приведённые примеры на языке Haskell не совсем корректны, поскольку в языке нет идиомы коданных. В указанных примерах коданные только эмулируются при помощи неограниченно-определённого («бесконечного») списка.
Remove ads
См. также
Примечания
Литература
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads