Використання Γ
Основне використання вбудованого Γ
, відомого як узгодження шаблонів у списках або розробка списку , - розділити список на голову та хвіст та застосувати до них бінарну функцію. Це відповідає схемі Haskell, що відповідає ідіомі
f (x : xs) = <something>
f [] = <something else>
де <something>
вираз, що містить x
, xs
і можливо f
. Є 4 перевантаження Γ
, кожна з яких працює трохи інакше.
list
Перша перевантаження, list
приймає значення a
і двійкову функцію f
. Він повертає нову функцію, яка бере список, повертається, a
якщо вона порожня, і закликає f
голову та хвіст , якщо вони не порожні . Наприклад, Γ_1€
бере список, повертає, -1
якщо він порожній, і індекс першого появи першого елемента в хвості, якщо ні.
listN
Друга перевантаження,, listN
є аналогічною list
, за винятком того, що a
вона опущена, а замість цього використовується значення за замовчуванням типу повернення. Наприклад, Γ€
еквівалентно Γ0€
, оскільки числове значення за замовчуванням є 0
.
На практиці listN
використовується частіше list
, оскільки значення за замовчуванням або не має значення або саме те, що вам потрібно. Загальна закономірність - Γ~αβγ
де αβγ
три функції; це стосується β
першого елемента та γ
хвоста та поєднує результати з α
. Це було використано, наприклад, у цій відповіді . Інші шаблони включають Γo:α
для застосування α
лише до першого елемента та Γ·:mα
для застосування α
до всіх елементів, крім першого. Останнє було використано у цій відповіді .
listF
Третя перевантаження трохи більше задіяна. Мовляв list
, він приймає значення a
та функцію f
та повертає нову функцію, g
яка бере список. Однак цей час f
приймає додатковий аргумент функції, який є g
самим собою, і може викликати його за будь-яким значенням (включаючи, але не обмежуючись цим, хвіст списку введення). Це означає, що listF
реалізується загальна схема рекурсії за списками.
listF
використовується не дуже часто, оскільки явна рекурсія з list
/ listN
зазвичай є такою ж довжиною або коротшою, як у цій відповіді .
listNF
listNF
полягає в listF
тому, що listN
слід list
: вхід a
опущено, а замість цього використовується значення за замовчуванням типу повернення. У рідкісних випадках він може бути коротшим, ніж правий складка, наприклад, у цій відповіді .
На прикладі рекурсивних версій Γ
функції Γλ·:o⁰↔
перетасовує список у порядку першого, останнього, другого, другого до останнього, третього, третього до останнього тощо.
Спробуйте в Інтернеті!
Функція f
- явна лямбда λ·:o⁰↔
, аргументом якої ⁰
є вся функція. Що f
означає зворотний хвіст ↔
, потім викликайте головну функцію рекурсивно o⁰
, і, нарешті, торкніться голови назад ·:
. Звичайно, Γ·:o₀↔
байт коротший, але він не працює, якщо рядок містить щось інше, ніж ця функція.