Usos de Γ
O principal uso do built-in Γ, conhecido como correspondência de padrões em listas ou desconstrução de listas , é dividir uma lista em uma cabeça e cauda e aplicar uma função binária nelas. Corresponde ao idioma correspondente do padrão Haskell
f (x : xs) = <something>
f [] = <something else>
onde <something>é uma expressão que contém x, xse possivelmente f. Existem 4 sobrecargas de Γ, cada uma das quais funciona um pouco diferente.
list
A primeira sobrecarga, listassume um valor ae uma função binária f. Ele retorna uma nova função que pega uma lista, retorna ase estiver vazia e chama fa cabeça e a cauda se não estiver vazia. Por exemplo, Γ_1€pega uma lista, retorna -1se estiver vazia e o índice da primeira ocorrência do primeiro elemento na cauda, se não estiver.
listN
A segunda sobrecarga,, listNé semelhante a list, exceto que aé omitida e o valor padrão do tipo de retorno é usado. Por exemplo, Γ€é equivalente a Γ0€, já que o valor numérico padrão é 0.
Na prática, listNé usado com mais frequência do que list, uma vez que o valor padrão é irrelevante ou exatamente o que você precisa. Um padrão comum é Γ~αβγonde αβγestão três funções; isso se aplica βao primeiro elemento e γà cauda e combina os resultados com α. Foi usado, por exemplo, nesta resposta . Outros padrões incluem Γo:αa aplicação αapenas ao primeiro elemento e Γ·:mαa aplicação αa todos os elementos, exceto o primeiro. O último foi usado nesta resposta .
listF
A terceira sobrecarga é um pouco mais envolvida. Como list, é preciso um valor ae uma função fe retorna uma nova função gque leva uma lista. No entanto, esse tempo fexige um argumento de função extra, que é gele próprio, e pode chamá-lo com qualquer valor (incluindo, mas não limitado a, final da lista de entrada). Isso significa que listFimplementa um esquema geral de recursão nas listas.
listFnão é usado com muita frequência, pois a recursão explícita com list/ listNgeralmente é do mesmo tamanho ou menor, como nesta resposta .
listNF
listNFé para o listFque listNé list: a entrada aé omitida e o valor padrão do tipo de retorno é usado. Em raras circunstâncias, pode ser menor que uma dobra à direita, por exemplo, nesta resposta .
Como exemplo das versões recursivas de Γ, a função Γλ·:o⁰↔embaralha uma lista na ordem primeiro, último, segundo, penúltimo, terceiro, penúltimo e assim por diante.
Experimente online!
A função fé a lambda explícita λ·:o⁰↔, cujo argumento ⁰é a função inteira. O que ffaz é inverter a cauda com ↔, em seguida, chame a função principal recursivamente com o⁰e finalmente enfie a cabeça para trás ·:. Obviamente, Γ·:o₀↔é um byte mais curto, mas não funciona se a linha contiver algo além dessa função.