155 votes

Applications du monde réel de zygohistomorphic prepromorphisms

Oui, celles-ci:

{-#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))

Oui, je sais qu'ils sont un (HHOS) blague. Je suis à la recherche d'un exemple réel de simple hack valeur et le dernier, mais pas moins, pour l'ajouter au wiki en disant: "C'est la idiomatiques façon d'exprimer XYZ". Je vais mettre une prime sur ce si vous ne parvenez pas à trouver une solution. Si vous êtes complètement perdu sur ce qu'ils désignent, Edward posté une courte explication sur reddit.

Admissibles les Réponses doivent:

  1. faire quelque chose au moins, à distance et en théorie de calcul utile. C'est, répond que de réduire à l' id sont sortis.

  2. utiliser toutes les fonctionnalités de l'opération, il n'en passant de l'id ou le const, ou l'équivalent.

  3. pas tout aussi bien être exprimable par un simple, de la vanille pli ou tel, donc, ne se contente pas de mettre en oeuvre product dans les méandres.

Points Bonus seront attribués à:

  • Problème bien connu ou de l'algorithme

  • résolu, respectivement exprimé, d'une manière inhabituelle, que les gains

  • la clarté et/ou de la performance

  • et/ou hack valeur

  • et/ou lulz, à peu près dans cet ordre, ainsi que

  • de haut rang réponses (bravo la démocratie)

Veuillez également noter Edward réponse ci-dessous. Ce ZHPM mise en œuvre que vous utilisez est votre choix.

52voto

stephen tetley Points 3622

Sharon Curtis et Shin-Mu Cheng ont une Fonctionnelle de la Perle à l'aide de zygomorphisms pour trouver un maximum d'dense segments (généralisation de segment maximale des sommes). Zygomorphisms sont apparemment un bon ajustement pour les fenêtres coulissantes problèmes une fois que vous êtes habitué à eux.

http://www.iis.sinica.edu.tw/~scm/2010/fonctionnelle-la perle-au maximum-dense-segments/

Je voudrais nommer les auteurs pour le crédit supplémentaire qu'ils ont évité l'utilisation de la virgule fixe Mu foncteur.

39voto

Edward Kmett Points 18369

Remarque, la signature de ces a changé, parce qu'il n'était pas suffisamment général, et je l'ai inclus (comme une blague) dans mon récursivité-régimes de package.

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 mise en œuvre a été simplifié.

zygoHistoPrepro f g t = gprepro (distZygoT f distHisto) g t

Et à partir de la nouvelle de la mise en œuvre, il devrait être évident comment mettre en œuvre généralisée zygohistomorphic prepromorphism, en relaxant la contrainte que vous avez un (Base t)-Branching flux, grâce à l'utilisation de l' distGHisto à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X