Чрезвычайно свободно говоря, катаморфизм - это лишь небольшое обобщение fold
, а анаморфизм - это небольшое обобщение unfold
.(И гиломорфизм - это просто разворачивание, за которым следует сгиб.).Обычно они представлены в более строгой форме, чтобы прояснить связь с теорией категорий.Более плотная форма позволяет нам различать данные (обязательно конечное произведение начальной алгебры) и кодаты (возможно, бесконечное произведение конечной коалгебры).Это различие позволяет нам гарантировать, что фолд никогда не вызывается в бесконечном списке.Другая причина забавного способа написания катаморфизмов и анаморфизмов заключается в том, что, работая над F-алгебрами и F-коалгебрами (генерируемыми из функторов), мы можем записать их раз и навсегда, а не один раз над списком, один раз надбинарное дерево и т. д. Это, в свою очередь, помогает точно понять, , почему - это все одно и то же.
Но с точки зрения чистой интуиции, вы можете рассматривать ката и ану как сокращение ипродюсирование, и это все.
Редактировать: немного больше
Метаморфизм (Гиббонс) похож на хайло наизнанку - его сгиб, за которым следует разворачивание.Таким образом, вы можете использовать его, чтобы разрушить поток и создать новый с потенциально другой структурой.
Экметт опубликовал хорошее «руководство по полю» для различных схем в литературе: http://comonad.com/reader/2009/recursion-schemes/
Однако, хотя «интуитивно понятные» объяснения просты, связанный код не так хорош, и посты в блогах по некоторым из них могут быть немного сложными / запрещающими.
Тем не менее, за исключениемвозможно, для гистоморфизмов я не думаю, что остальная часть зоопарка - это обязательно то, о чем вы бы хотели подумать напрямую большую часть времени.Если вы «получаете» hylo и meta, вы можете выразить почти что-либо в терминах их одних.Обычно другие морфизмы являются более строгими, а не меньшими (но, следовательно, дают вам больше свойств «бесплатно»).