Warunki te zostały wymienione na moim kursie uniwersyteckim. Szybkie wyszukiwanie w Google wskazało mi kilka prac uniwersyteckich, ale szukam prostego wyjaśnienia.
functional-programming
haskell
Gaurav Abbi
źródło
źródło
C
jest obiektem w jakiejś kategorii (powiedzmyCC
),F
jest funktorem,CC -> CC
więc odwzorowuje się zCC
powrotem na sobie. TerazF CC -> CC
jest tylko zwykła strzałka w kategoriiCC
. Tak więcF
algebra jest przedmiotemC : CC
i strzałąF C -> C
wCC
Odpowiedzi:
Mimo że udzielono już 2 odpowiedzi, nie sądzę, aby wyjaśniono tu „podział bananów”.
Jest to rzeczywiście zdefiniowane w „Funkcjonalnym programowaniu z bananami, soczewkami, kopertami i drutem kolczastym, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991”; ten artykuł jest trudny do przeczytania (dla mnie) ze względu na intensywne stosowanie Squiggola. Jednak „Samouczek na temat uniwersalności i ekspresji składania, Graham Hutton, 1999” zawiera definicję, która jest łatwiejsza do przeanalizowania:
źródło
Jest to tak naprawdę odniesienie do artykułu Meijera i kilku innych zatytułowanych „ Programowanie funkcjonalne z bananami, soczewkami, kopertami i drutem kolczastym ”, podstawową ideą jest to, że możemy wziąć dowolny typ danych rekurencyjnych, jak powiedzmy
i możemy rozliczyć rekurencję na zmienną typu
powodem, dla którego dołączyłem,
F
jest to, że jest to teraz funkt! Pozwala nam także naśladować listy, ale z pewnym zwrotem: aby budować listy, musimy zagnieżdżać typ listyAby odzyskać naszą oryginalną listę, musimy zagnieżdżać ją w nieskończoność . To da nam typ
ListFF
gdzieW tym celu zdefiniuj „stały typ punktu”
Jako ćwiczenie powinieneś sprawdzić, czy spełnia to powyższe równanie, a teraz możemy wreszcie zdefiniować, czym są banany (katamorfizmy)!
ListAlg
s są rodzajem „algebr listowych” i możemy zdefiniować określoną funkcjęPonadto
Wygląda podobnie?
cata
jest dokładnie taki sam jak prawe fałdy!Naprawdę interesujące jest to, że możemy to zrobić na więcej niż tylko listach, każdy typ zdefiniowany za pomocą tego „stałego punktu funktora” ma
cata
i, aby pomieścić je wszystko, wystarczy rozluźnić podpis typuJest to faktycznie zainspirowane fragmentem teorii kategorii, o której pisałem , ale jest to mięso strony Haskella.
źródło
Chociaż jozefg udzielił odpowiedzi, nie jestem pewien, czy odpowiedział na pytanie. „Prawo syntezy jądrowej” wyjaśniono w następującym artykule:
Zasadniczo mówi, że w niektórych warunkach można łączyć („utrwalać”) kompozycję funkcji i składać w jedną fałdę, więc w zasadzie
Warunki dla tej równości są
„Podział banana” lub „zasada podziału banana” pochodzi z artykułu
Niestety artykuł jest bardzo trudny do rozszyfrowania, ponieważ wykorzystuje formalizm Bird – Meertens, więc nie mogłem zrobić z niego głowy ani ogona. O ile rozumiem „prawo podziału bananów”, mówi ono, że jeśli masz 2 fałdy działające na tym samym argumencie, można je scalić w jeden fałd.
źródło