Zygohistomorfik prepromorfizmlerin gerçek dünyadaki uygulamaları


156

Evet, bunlar :

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

Evet, ( HHOS ) şakası olduklarını biliyorum . Ben basit hack değeri ve son, ama en az değil, "Bu XYZ ifade etmek için deyimsel yoludur" diyerek wiki eklemek için gerçek bir dünya örneği arıyorum. Ben olacak ki, çözüm ile gelip başarısız olması bu konuda bir ödül koydu. Eğer ne oldukları hakkında tamamen kaybolursanız, Edward reddit hakkında kısa bir açıklama yaptı .

Uygun Cevaplar:

  1. en azından uzaktan ve teorik olarak hesaplamalı olarak faydalı bir şey yapın. Yani azalan cevaplar iddışarıda.

  2. şemanın tüm özelliklerini kullanın, id, const veya eşdeğeri dahil değildir.

  3. basit, vanilya kıvrımı veya benzeri productbir şeyle eşit derecede iyi ifade edilemez, bu yüzden sadece dolambaçlı bir şekilde uygulamayın .

Bonus puanları:

  • Bilinen sorun veya algoritma

  • sırasıyla ifade edilen, alışılmadık bir şekilde kazanılan

  • netlik ve / veya performans

  • ve / veya hack değeri

  • ve / veya lulz, kabaca bu sırayla,

  • üst düzey cevaplar (yay demokrasisi)

Lütfen Edward'ın aşağıdaki cevabına da dikkat edin . Kullandığınız ZHPM uygulaması seçiminizdir.


5
IOYığına dahil olsaydın, SimonPJ'nin ünlü launchMisslesişlevini kullanabilirdik. Ama sanırım tüm bu saf-saf soyut saçmalıkların bütün mesele, bu tür şeylerin olasılığından kaçınmaktır.
Yitz

6
Şey, aherhangi bir şey olabilir, bu nedenle giriş verilerinizin bir değerlendirmesine dayalı olarak füzeleri stratejik olarak başlatan bir IO değeri oluşturmaktan çekinmeyin.
barsoap

49
Bu soruya tıkladım çünkü ne hakkında konuştuğun hakkında hiçbir fikrim yoktu. +1 iyi efendim, +1
Drew

7
Tüm bileşenleri kullanmak isteyen bir kişi, bir zygohistomorfik prepromorfizm özyinelemesinin neye genişlediğini elle yazmak için iyi olur ve sonra tüm bu kalıplara ihtiyaç duyan sorunları arar; Zorunlu döngüler keyfi olarak karmaşık izleme yapma eğilimindedir, bu yüzden bakmak için iyi bir yer olabilir.
Edward Z. Yang

3
ve daha da önemlisi - Karışacak mı ?! (çok üzgünüm, direnemedim)
n00b

Yanıtlar:


52

Sharon Curtis ve Shin-Cheng Mu, maksimum yoğun segmentleri bulmak için zigomorfizm kullanan bir Fonksiyonel İnci'ye sahiptir (maksimum segment toplamlarının genelleştirilmesi). Zigomorfizmler, onlara alıştıktan sonra kayan pencere problemleri için iyi bir seçimdir.

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

Sabit noktalı Mu işlevinin kullanımından kaçındıkları için yazarları ekstra kredi için aday gösterirdim.


Gözden geçirmekten, DRSP'yi izlerken histoyu nasıl kullandıklarını düşünüyorum (aynı anlamda basitçe foldrzaten oluşturulmuş listeye bakabilir), ancak prepro benim için hemen belirgin değil. Detaylandırabilir misiniz? (ve mümkünse, wiki sayfasına yapıştırabileceğimiz kısa + tatlı kod verin?)
barsoap

3
Kod, açılış sayfasındaki hataların altındaki bağlantıdan edinilebilir. Zigomorfizmanın asıl tanımı Main.hs dosyasındadır - kağıttaki tanımdan farklıdır. Bu "sadece" bir zigomorfizm "zigoshistomorfik prepromorfizm" değildir - zigomorfizm gerçek dünya kullanımında gördüğüm en yakın şeydir. Jevgeni Kabanov'un
stephen tetley

39

Bunların imzası değişti, çünkü yeterince genel değildi ve özyineleme şemaları paketine (şaka olarak) dahil ettim .

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

Uygulama da basitleştirildi.

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

Ve yeni uygulamadan , bunun yerine bir akıma sahip olduğunuz kısıtlamayı gevşeterek, genelleştirilmiş bir zigoshistomorfik prepromorfizmanın nasıl uygulanacağı açık olmalıdır .(Base t)-BranchingdistGHisto


2
Ah evet oldukça açık.
Ben Longo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.