programmers for haskell functional-programming category-theory

haskell - category theory for programmers



Aplicaciones del mundo real de prepromorfismos zygohistomorphic (2)

Sí, estos :

{-#LANGUAGE TypeOperators, RankNTypes #-} import Control.Morphism.Zygo import Control.Morphism.Prepro import Control.Morphism.Histo import Control.Functor.Algebra import Control.Functor.Extras import Control.Functor.Fix import Control.Comonad.Cofree zygohistomorphic_prepromorphism :: Functor f => Algebra f b -> GAlgebra f (ZygoT (Cofree f) b) a -> (f :~> f) -> FixF f -> a zygohistomorphic_prepromorphism f = g_prepro (distZygoT (liftAlgebra f) (distHisto id))

Sí, sé que son una broma ( HHOS ). Estoy buscando un ejemplo del mundo real para el valor de pirateo simple y, por último, pero no menos importante, para agregarlo al wiki diciendo "Esta es la forma idiomática de expresar XYZ". Pondré una recompensa por esto si no logras encontrar una solución. Si estás completamente perdido en lo que tratan, Edward publicó una breve explicación sobre reddit.

Las respuestas elegibles deben:

  1. hacer algo al menos de manera remota y teóricamente útil desde el punto de vista computacional. Es decir, las respuestas que reducen a id están fuera.

  2. use todas las características del esquema, sin pasar de id, o const, o equivalente.

  3. no se puede expresar de la misma manera por un doblez simple o similar, así que no implemente el product simplemente de forma serpenteante.

Los puntos de bonificación se otorgarán a:

  • Problema o algoritmo bien conocido

  • resuelto, respectivamente expresado, de una manera inusual que gana

  • claridad y / o rendimiento

  • y / o hackear el valor

  • y / o lulz, en aproximadamente ese orden, así como

  • respuestas de alto rango (yay democracia)

Por favor, también tenga en cuenta la respuesta de Edward a continuación. Qué implementación de ZHPM usa es su elección.


Sharon Curtis y Shin-Cheng Mu tienen una Perla funcional que utiliza zigomorfismos para encontrar segmentos de máxima densidad (una generalización de las sumas de los segmentos máximos). Los cigomorfismos son aparentemente una buena opción para los problemas de ventana deslizante una vez que esté acostumbrado a ellos.

http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/

Nominaría a los autores para obtener crédito adicional, ya que evitaron el uso del funcionador Mu de punto fijo.


Tenga en cuenta que la firma de estos ha cambiado, porque no era lo suficientemente general, y lo incluí (como una broma) en mi paquete de recursion-schemes .

zygoHistoPrepro :: (Unfoldable t, Foldable t) => (Base t b -> b) -> (forall c. Base t c -> Base t c) -> (Base t (EnvT b (Stream (Base t)) a) -> a) -> t -> a

La implementación también se simplificó.

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

Y a partir de la nueva implementación, debería ser obvio cómo implementar un prepromorfismo zygohistomorphic generalizado , relajando la restricción de que usted tiene un flujo (Base t)-Branching , mediante el uso de distGHisto en distGHisto lugar.