Використання Γ
Основне використання вбудованого Γ, відомого як узгодження шаблонів у списках або розробка списку , - розділити список на голову та хвіст та застосувати до них бінарну функцію. Це відповідає схемі 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₀↔байт коротший, але він не працює, якщо рядок містить щось інше, ніж ця функція.