Usos de Γ
El uso principal de la función incorporada Γ, conocida como coincidencia de patrones en listas o deconstrucción de listas , es dividir una lista en cabeza y cola, y aplicar una función binaria en ellas. Esto corresponde al patrón de coincidencia de patrones de Haskell
f (x : xs) = <something>
f [] = <something else>
donde <something>es una expresión que contiene x, xsy posiblemente f. Hay 4 sobrecargas Γ, cada una de las cuales funciona un poco diferente.
list
La primera sobrecarga, listtoma un valor ay una función binaria f. Devuelve una nueva función que toma una lista, devuelve asi está vacía y llama fa la cabeza y la cola si no está vacía. Por ejemplo, Γ_1€toma una lista, devuelve -1si está vacía, y el índice de la primera aparición del primer elemento en la cola si no.
listN
La segunda sobrecarga, listNes similar a list, excepto que ase omite y en su lugar se usa el valor predeterminado del tipo de retorno. Por ejemplo, Γ€es equivalente a Γ0€, ya que el valor numérico predeterminado es 0.
En la práctica, listNse usa con más frecuencia list, ya que el valor predeterminado es irrelevante o exactamente lo que necesita. Un patrón común es Γ~αβγ, donde αβγhay tres funciones; esto se aplica βal primer elemento y γa la cola, y combina los resultados con α. Se usó, por ejemplo, en esta respuesta . Otros patrones incluyen Γo:αpara aplicar αsolo al primer elemento y Γ·:mαpara aplicar αa todos los elementos excepto el primero. Este último se usó en esta respuesta .
listF
La tercera sobrecarga es un poco más complicada. Al igual list, toma un valor ay una función f, y devuelve una nueva función gque toma una lista. Sin embargo, esta vez ftoma un argumento de función adicional, que es en gsí mismo, y puede invocarlo en cualquier valor (incluido, entre otros, el final de la lista de entrada). Esto significa que listFimplementa un esquema de recursión general en las listas.
listFno se usa con mucha frecuencia, ya que la recursividad explícita con list/ listNsuele ser de la misma longitud o más corta, como en esta respuesta .
listNF
listNFes a listFlo que listNes list: ase omite la entrada y en su lugar se usa el valor predeterminado del tipo de retorno. En raras circunstancias, puede ser más corto que un pliegue derecho, por ejemplo en esta respuesta .
Como ejemplo de las versiones recursivas de Γ, la función Γλ·:o⁰↔baraja una lista en el orden primero, último, segundo, penúltimo, tercero, penúltimo, y así sucesivamente.
Pruébalo en línea!
La función fes la lambda explícita λ·:o⁰↔, cuyo argumento ⁰es la función completa. Lo que fhace es invertir la cola con ↔, luego llamar a la función principal de forma recursiva o⁰y finalmente clavar la cabeza hacia atrás con ·:. Por supuesto, Γ·:o₀↔es un byte más corto, pero no funciona si la línea contiene algo más que esta función.