Utilisations de Γ
L'utilisation principale de la fonction intégrée Γ, connue sous le nom de correspondance de motifs sur des listes ou de déconstruction de listes , est de diviser une liste en une tête et une queue et d'y appliquer une fonction binaire. Cela correspond à l'idiome de correspondance du motif Haskell
f (x : xs) = <something>
f [] = <something else>
où <something>est une expression contenant x, xset éventuellement f. Il y a 4 surcharges de Γ, chacune fonctionnant un peu différemment.
list
La première surcharge,, listprend une valeur aet une fonction binaire f. Il retourne une nouvelle fonction qui prend une liste, retourne asi elle est vide et appelle fsur la tête et la queue si elle n'est pas vide. Par exemple, Γ_1€prend une liste, retourne -1si elle est vide et l'index de première occurrence du premier élément dans la queue sinon.
listN
La deuxième surcharge,, listNest similaire à list, sauf qu'elle aest omise et que la valeur par défaut du type de retour est utilisée à la place. Par exemple, Γ€est équivalent à Γ0€, car la valeur numérique par défaut est 0.
En pratique, listNest utilisé plus souvent que list, car la valeur par défaut n'est pas pertinente ou correspond exactement à ce dont vous avez besoin. Un modèle commun est Γ~αβγ, où αβγsont trois fonctions; cela s'applique βau premier élément et γà la queue, et combine les résultats avec α. Il a été utilisé par exemple dans cette réponse . D'autres modèles incluent l' Γo:αapplication αuniquement au premier élément et l' Γ·:mαapplication αà tous les éléments sauf le premier. Ce dernier a été utilisé dans cette réponse .
listF
La troisième surcharge est un peu plus compliquée. Comme listça, ça prend une valeur aet une fonctionf , et renvoie une nouvelle fonction gqui prend une liste. Cependant, cette fois fprend un argument de fonction supplémentaire, qui est glui - même, et peut l'appeler sur n'importe quelle valeur (y compris, mais sans s'y limiter, la queue de la liste d'entrée). Cela signifie que listFimplémente un schéma général de récursivité sur les listes.
listFn'est pas utilisé très souvent, car la récursivité explicite avec list/ listNest généralement de la même longueur ou plus courte, comme dans cette réponse .
listNF
listNFest à listFce qui listNest à list: l'entrée aest omise et la valeur par défaut du type de retour est utilisée à la place. Dans de rares circonstances, il peut être plus court qu'un pli droit, par exemple dans cette réponse .
À titre d'exemple des versions récursives de Γ, la fonction Γλ·:o⁰↔mélange une liste dans l'ordre premier, dernier, deuxième, avant-dernier, troisième, avant-dernier, etc.
Essayez-le en ligne!
La fonction fest la lambda expliciteλ·:o⁰↔ , dont l'argument ⁰est la fonction entière. Ce qui fne fait qu'inverser la queue avec ↔, puis appeler la fonction principale récursivement avec o⁰, et enfin clouer la tête en arrière avec ·:. Bien sûr, Γ·:o₀↔est un octet plus court, mais ne fonctionne pas si la ligne contient autre chose que cette fonction.