Композиція функції Haskell є екземпляром архітектурного шаблону "труби та фільтри"


9

Архітектурна структура труби та фільтра визначається як ланцюжок обробних елементів, розташованих так, що вихід кожного елемента є входом наступного . Здається, що кожен приклад враховує міжпроцесовий або міжпотоковий зв'язок, який здійснюється через якийсь спільний буфер.

Мені здається, що композиція функції Haskell виконує те саме завдання. Чи можемо ми сказати, що це екземпляр цієї шаблону, навіть якщо мова йде лише про впорядкування функцій і жоден явний буфер не використовується як труба? Якщо так, то чи можемо ми сказати те саме для неленої мови?

Відповіді:


8

Вони пов'язані, але з'єднання є навпаки (свого роду).

Композиція морфізму у відповідній категорії точно моделює як функціональну композицію (де категорія призначена Setдля суворої мови, так і CPOдля ледачої мови), так і композиційну процедуру (де категорія - категорія (AFAIK, неназвана), де об'єкти - це рядки, морфізми - оболонка процесів, а склад - трубопровідник). Процеси оболонки можна зрозуміти, не втрачаючи ні загальності, ні точності, як (ліниві) функції типу String -> WriterT String IO String, а чисті функції типу String -> Stringможна без втрат перетворити на функції типу і з них String -> Identity String, тому обидва справді просто (>>=)маскуються.


1
Що таке CPOкатегорія? Мій google-fu слабкий :(
Андрес Ф.

3
@AndresF. Категорія Cповних Pартеріальних Oгонщиків.
Полум’я Птарієна

2

Є різниця. Труби та фільтри мають зв'язок з даними та даними, тоді як Haskell Function Composition стосується першокласних функцій . Функції першого класу є композиційними так, що це не труби та фільтри.

Подальше читання
Що означає комбінованість у контексті функціонального програмування?


1
Композиція не обов'язково має справу з функцією першого класу настільки, що композиція сама по собі є функцією першого класу. Візьмемо, наприклад, склад функції ++, де є композиція ., ++ . ++прийме значення і поверне це значення, збільшене вдвічі, але ++це не першокласна функція, вона лише приймає значення і повертає значення. Функція композиції - це функція першого класу, яка бере дві функції і повертає одну.
Джиммі Хоффа

1
@JimmyHoffa, я думаю, ви плутаєте поняття "функція першого класу" з "функцією вищого порядку". Якщо мова має "функції першого класу", вона розглядає функції так само, як і інші типи даних першого класу; вони можуть передаватися та повертатися з функцій, зберігатися в структурах даних тощо. Функція вищого порядку використовує перевагу першокласного характеру функцій, приймаючи параметри функції та / або повертаючи значення функцій.
Леві Пірсон

@LeviPearson Так, я, мабуть, випадково поклав мозок набік, коли вранці вставав, написав цей коментар. Якщо ви збираєтеся продовжувати розмовляти тут, пишучи хороший вміст для P.SE, розмірковуйте на холостому ходу в загальному чаті P.SEs
Jimmy Hoffa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.