AnamorphismeL'anamorphisme (du Grec: = vers le haut; morphisme = forme) est un concept de la programmation fonctionnelle fondé sur la théorie des catégories. En programmation fonctionnelle, un anamorphisme est une généralisation des fonctions de type unfold permettant la création générique de liste au cadre des types de données arbitraires qui peuvent être décrites par des coalgèbres finales (ou « algèbres initiales »). Les anamorphismes, qui sont , sont la forme duale des catamorphismes récursifs, tout comme les unfolds sont une forme duale des folds.
CoinductionEn informatique théorique, la coinduction est une technique de définition et de vérification de propriétés de systèmes d'objets en interaction. La coinduction est la notion duale de l'induction structurelle. Les types définis par coinduction sont aussi connus comme codata et sont en général des structures de données infinies, tels que les flux. En tant que définition ou spécification informatique, la coinduction décrit comment un objet peut être décomposé en objets plus simples.
Fold (higher-order function)In functional programming, fold (also termed reduce, accumulate, aggregate, compress, or inject) refers to a family of higher-order functions that analyze a recursive data structure and through use of a given combining operation, recombine the results of recursively processing its constituent parts, building up a return value. Typically, a fold is presented with a combining function, a top node of a data structure, and possibly some default values to be used under certain conditions.
CorecursionIn computer science, corecursion is a type of operation that is to recursion. Whereas recursion works analytically, starting on data further from a base case and breaking it down into smaller data and repeating until one reaches a base case, corecursion works synthetically, starting from a base case and building it up, iteratively producing data further removed from a base case. Put simply, corecursive algorithms use the data that they themselves produce, bit by bit, as they become available, and needed, to produce further bits of data.