Istilah-istilah ini disebutkan dalam kursus universitas saya. Googling cepat mengarahkan saya ke beberapa makalah universitas, tetapi saya mencari penjelasan sederhana.
functional-programming
haskell
Gaurav Abbi
sumber
sumber
C
adalah objek dalam beberapa kategori (katakanlahCC
),F
adalah functor dariCC -> CC
sehingga memetakanCC
kembali ke dirinya sendiri. SekarangF CC -> CC
hanya panah normal dalam kategori iniCC
. JadiF
aljabar adalah objekC : CC
dan panahF C -> C
diCC
Jawaban:
Meskipun 2 jawaban sudah diberikan, saya kira "pisang split" belum dijelaskan di sini.
Ini memang didefinisikan dalam "Pemrograman Fungsional dengan Pisang, Lensa, Amplop dan Kawat Berduri, Erik Meijer Maarten Fokkinga, Ross Paterson, 1991"; artikel itu sulit dibaca (bagi saya) karena penggunaannya yang berat terhadap Squiggol. Namun, "Tutorial tentang universalitas dan ekspresifitas lipatan, Graham Hutton, 1999" berisi definisi yang lebih mudah diurai:
sumber
Jadi ini sebenarnya direferensikan ke makalah oleh Meijer dan beberapa orang lain yang disebut " Pemrograman Fungsional dengan Pisang, Lensa, Amplop dan Kawat Berduri ", ide dasarnya adalah bahwa kita dapat mengambil tipe data rekursif, seperti
dan kita bisa memfaktorkan rekursi menjadi variabel tipe
alasan mengapa saya menambahkan itu
F
karena ini sekarang adalah functor! Itu juga memungkinkan kita untuk meniru daftar, tetapi dengan twist: untuk membangun daftar kita harus bersarang tipe daftarUntuk memulihkan daftar asli kita, kita perlu terus bersarang tanpa batas . Itu akan memberi kita jenis di
ListFF
manaUntuk melakukan ini, tentukan "tipe titik tetap"
Sebagai latihan, Anda harus memverifikasi ini memenuhi persamaan kami di atas. Sekarang kami akhirnya dapat menentukan apa pisang (katamorfisme)!
ListAlg
s adalah jenis "list algebras", dan kita dapat mendefinisikan fungsi tertentuLebih jauh lagi
Terlihat familier?
cata
persis sama dengan lipatan kanan!Yang benar-benar menarik adalah bahwa kita dapat melakukan ini lebih dari sekadar daftar, jenis apa pun yang didefinisikan dengan "titik tetap dari functor" ini memiliki
cata
dan untuk memperbarui mereka semua kita hanya perlu bersantai dengan tanda tangan jenisIni sebenarnya diilhami dari sepotong teori kategori yang saya tulis , tetapi ini adalah daging dari sisi Haskell.
sumber
Meskipun jozefg memberikan jawaban, saya tidak yakin apakah itu menjawab pertanyaan. "Hukum fusi" dijelaskan dalam makalah berikut:
Pada dasarnya dikatakan bahwa dalam beberapa kondisi Anda dapat menggabungkan ("sekering") komposisi fungsi dan lipat menjadi satu lipatan, jadi pada dasarnya
Kondisi untuk kesetaraan ini adalah
"Pisang split" atau "banana split law" berasal dari artikel
Sayangnya artikel ini sangat sulit untuk diuraikan karena menggunakan formalisme Bird-Meertens sehingga saya tidak dapat membuat kepala atau ekornya. Sejauh yang saya mengerti "hukum perpecahan pisang" dikatakan bahwa jika Anda memiliki 2 lipatan yang beroperasi pada argumen yang sama, mereka dapat digabung menjadi satu lipatan.
sumber