แอปพลิเคชันในโลกแห่งความจริงของ zygohistomorphic prepromorphisms


156

ใช่สิ่งเหล่านี้ :

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

ใช่ฉันรู้ว่าพวกเขาเป็นเรื่องตลก( HHOS ) ฉันกำลังมองหาตัวอย่างในโลกแห่งความเป็นจริงสำหรับค่าแฮ็คที่เรียบง่ายและสุดท้าย แต่ไม่ท้ายสุดเพื่อเพิ่มลงในวิกิว่า "นี่เป็นวิธีที่แสดงถึง XYZ" ฉันจะให้รางวัลกับสิ่งนี้หากคุณล้มเหลวในการหาทางออก หากคุณกำลังหลงทางอย่างสิ้นเชิงกับสิ่งที่พวกเขากำลังทำอยู่เอ็ดเวิร์ดโพสต์คำอธิบายสั้น ๆ เกี่ยวกับ Reddit

คำตอบที่มีสิทธิ์จะต้อง:

  1. ทำอย่างน้อยจากระยะไกลและมีประโยชน์ในทางทฤษฎีคำนวณ นั่นคือคำตอบที่ลดidออกไป

  2. ใช้คุณสมบัติทั้งหมดของโครงร่างโดยไม่ผ่าน id หรือ const หรือเทียบเท่า

  3. ไม่ควรแสดงให้เห็นได้อย่างเท่าเทียมกันโดยวิธีการที่เรียบง่ายวานิลลาหรืออื่น ๆ ดังนั้นอย่าเพียง แต่นำไปใช้productในทางคดเคี้ยว

คะแนนโบนัสจะมอบให้กับ:

  • ปัญหาหรืออัลกอริทึมที่รู้จักกันดี

  • แก้ไขตามลำดับแสดงในลักษณะผิดปกติที่ได้รับ

  • ความชัดเจนและ / หรือประสิทธิภาพ

  • และ / หรือค่าแฮ็ค

  • และ / หรือ lulz ตามลำดับโดยประมาณเช่นเดียวกับ

  • คำตอบระดับสูง (yay democracy)

โปรดทราบคำตอบของเอ็ดเวิร์ดด้านล่าง ZHPM ที่คุณใช้คืออะไร


5
หากคุณรวมอยู่IOในสแต็กของคุณเราอาจใช้launchMisslesฟังก์ชั่นที่โด่งดังของ SimonPJ แต่ฉันคิดว่าประเด็นทั้งหมดของเรื่องไร้สาระนามธรรมบริสุทธิ์ที่สุดคือการหลีกเลี่ยงความเป็นไปได้ของสิ่งต่าง ๆ
Yitz

6
ดีaสามารถเป็นอะไรก็ได้ดังนั้นรู้สึกฟรีเพื่อสร้างมูลค่า IO ว่าขีปนาวุธกลยุทธ์การเปิดตัวจากการประเมินผลของการป้อนข้อมูลของคุณ
barsoap

49
ฉันคลิกที่คำถามนี้เพราะฉันไม่รู้ว่าคุณกำลังพูดถึงเรื่องอะไร +1 ท่านดี +1
ดึง

7
ใครบางคนที่กำลังมองหาที่จะใช้ส่วนประกอบทั้งหมดจะทำได้ดีในการเขียนสิ่งที่ zygohistomorphic prepromorphism recursion ขยายออกไปด้วยตนเองและจากนั้นค้นหาปัญหาที่ต้องการรูปแบบเหล่านี้ทั้งหมด ลูปที่จำเป็นมักจะทำการติดตามที่ซับซ้อนโดยพลการดังนั้นพวกเขาอาจเป็นที่ที่เหมาะแก่การดู
Edward Z. Yang

3
และที่สำคัญกว่านี้ - มันจะผสมผสานกันไหม! (เสียใจมากไม่สามารถต้านทานได้)
n00b

คำตอบ:


52

ชารอนเคอร์ติสและชิน - เฉิงมู่มีมุกใช้งานโดยใช้ไซโมมอร์ฟิซึมในการหากลุ่มที่มีความหนาแน่นมากที่สุด Zygomorphisms ดูเหมือนจะเหมาะสำหรับปัญหาหน้าต่างบานเลื่อนเมื่อคุณคุ้นเคยกับมัน

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

ฉันจะเสนอชื่อผู้แต่งเพื่อขอเครดิตเพิ่มเนื่องจากพวกเขาหลีกเลี่ยงการใช้ functor Mu จุดคงที่


จากการอ่านแบบคร่าว ๆ ฉันคิดว่าฉันเห็นว่าพวกเขาใช้ฮิสโตเมื่อติดตาม DRSP อย่างไร (ในแง่เดียวกับที่เรียบง่ายfoldrสามารถดูรายการที่สร้างขึ้นแล้ว) แต่ prepro ไม่ปรากฏแก่ฉันทันที คุณสามารถทำอย่างละเอียด? (และถ้าเป็นไปได้โปรดให้รหัสสั้น + โค้ดหวาน ๆ ที่เราสามารถแก้ไขลงในหน้า wiki ได้หรือไม่)
barsoap

3
รหัสนี้มีให้จากลิงค์ด้านล่าง errata ในหน้า Landing Page คำจำกัดความที่แท้จริงของ zygomorphism อยู่ในไฟล์ Main.hs ซึ่งแตกต่างจากคำจำกัดความในกระดาษ มันคือ "แค่" zygomorphism ไม่ใช่ "zygohistomorphic prepromorphisms" - zygomorphism เป็นสิ่งที่ใกล้เคียงที่สุดที่ฉันเคยเห็นในโลกแห่งการใช้งานจริง แม้ว่าจะมีสไลด์โดย Jevgeni Kabanov โดยใช้ histomorphisms สำหรับการเขียนโปรแกรมแบบไดนามิก: cs.ioc.ee/~tarmo/tday-viinistu/kabanov-slides.pdf
stephen tetley

39

หมายเหตุลายเซ็นของสิ่งเหล่านี้เปลี่ยนไปเพราะมันเป็นเรื่องทั่วไปไม่เพียงพอและฉันรวมมัน (เป็นเรื่องตลก) ในแพ็คเกจการสอบถามซ้ำของฉัน

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

การใช้งานก็ง่ายขึ้นเช่นกัน

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

และจากการใช้งานใหม่ควรเห็นได้ชัดว่าจะใช้การเตรียมความพร้อมแบบ zygohistomorphic ทั่วไปโดยการผ่อนคลายข้อ จำกัด ที่คุณมี(Base t)-Branchingกระแสผ่านการใช้distGHistoแทน


2
อาใช่ค่อนข้างชัดเจน
Ben Longo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.