WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Кореку́рсия — в теории категорий и информатике тип операции, дуальный к рекурсии. Обычно корекурсия используется (совместно с механизмом ленивых вычислений) для генерации бесконечных структур данных.

Общие замечания

Правило использования корекурсии на коданных дуально правилу применения рекурсии на данных. Вместо свёртывания структуры данных с использованием результата рекурсивно полученного на основе значения для базисного случая, корекурсия развёртывает результат на основе начального значения. Необходимо отметить, что корекурсия создаёт потенциально бесконечные структуры данных, в то время как обычная рекурсия анализирует (разбирает) по необходимости конечные структуры данных. Обычная рекурсия неприменима к коданным, поскольку процесс анализа может никогда не остановиться. Соответственно, корекурсия не может производить данные, поскольку данные всегда конечны; но каждый частичный результат продуктивной корекурсии конечен и может быть интерпретирован как данные.

Примеры

Пример использования механизма корекурсии на языке Haskell (вычисление бесконечного списка чисел Фибоначчи):

fibs = 0 : 1 : next fibs
       where
       next (a: t@(b:_)) = (a+b) : next t

Другой пример — вычисление бесконечного списка простых чисел:

primes = next [2..]
         where
         next (x:xs) = x : next [ y | y <- xs, rem y x /= 0 ]

Данная функция (неэффективно) реализует алгоритм «Перебор делителей».[1]

Приведённые примеры на языке Haskell не совсем корректны, поскольку в языке нет идиомы коданных. В указанных примерах коданные только эмулируются при помощи неограниченно-определённого («бесконечного») списка.

См. также

Примечания

  1. Melissa E., «The Genuine Sieve of Eratosthenes», Journal of Functional Programming, Published online by Cambridge University Press 9 October 2008 doi:10.1017/S0956796808007004

Литература

  • David Turner (2004-07-28). “Total Functional Programming”. Journal of Universal Computer Science. 10 (7): 751—768.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии