2011-02-20 15 views
150

Vâng, these ones:ứng dụng thực thế giới của prepromorphisms zygohistomorphic

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

Vâng, tôi biết rằng họ là một (HHOS) trò đùa. Tôi đang tìm một ví dụ thực tế về giá trị hack đơn giản và cuối cùng, nhưng không kém phần quan trọng, để thêm nó vào wiki nói "Đây là cách thành ngữ để thể hiện XYZ". Tôi sẽ đặt tiền thưởng vào điều này nếu bạn không đưa ra giải pháp. Nếu bạn hoàn toàn bị mất về những gì họ đang nói về, Edward đăng một số short explanation trên reddit.

Đáp đủ điều kiện phải:

  1. làm điều gì đó ít nhất từ ​​xa và lý thuyết tính toán hữu ích. Tức là, các câu trả lời giảm xuống còn id đã hết.

  2. sử dụng tất cả các tính năng của lược đồ, không chuyển id, hoặc const hoặc tương đương.

  3. không bằng nhau cũng có thể biểu hiện bằng một lần vani đơn giản hoặc như vậy, do đó, không chỉ thực hiện product theo cách uốn khúc.

điểm thưởng sẽ được trao cho:

  • vấn đề nổi tiếng hoặc thuật toán

  • giải quyết, lần lượt bày tỏ, một cách bất thường mà đạt

  • rõ ràng và/hoặc hiệu suất

  • và/Hoặc hack giá trị

  • và/hoặc lulz, trong khoảng trật tự đó, cũng như

  • câu trả lời cao cấp (yay dân chủ)

Xin lưu ý Edward's answer dưới đây. Việc thực hiện ZHPM mà bạn sử dụng là lựa chọn của bạn.

+4

Nếu bạn đã bao gồm 'IO' trong ngăn xếp của mình, chúng tôi có thể đã sử dụng chức năng' launchMissles' nổi tiếng của SimonPJ. Nhưng tôi đoán toàn bộ quan điểm của tất cả những điều vô nghĩa siêu thuần khiết đó là tránh khả năng của những thứ như vậy. – Yitz

+4

Vâng, 'a' có thể là bất cứ điều gì, vì vậy hãy tự do xây dựng một giá trị IO để phóng tên lửa dựa trên đánh giá dữ liệu đầu vào của bạn. – barsoap

+47

Tôi đã nhấp vào câu hỏi này bởi vì tôi không biết bạn đang nói cái quái gì. 1 tốt sir, +1 – Drew

Trả lời

38

Lưu ý, chữ ký của những thứ này đã thay đổi, vì nó không đủ chung, và tôi đã bao gồm nó (như một trò đùa) trong gói recursion-schemes của tôi.

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 

Việc triển khai cũng được đơn giản hóa.

zygoHistoPrepro f = gprepro (distZygoT f distHisto) 

Và từ việc thực hiện mới nó nên được rõ ràng làm thế nào để thực hiện một tổng quát prepromorphism zygohistomorphic, bằng cách nới lỏng các hạn chế mà bạn có một dòng suối (Base t)-Branching, thông qua việc sử dụng các distGHisto để thay thế.

51

Sharon Curtis và Shin-Cheng Mu có một Ngọc trai chức năng sử dụng zygomorphisms để tìm các phân đoạn tối đa dày đặc (tổng quát hóa tổng phân đoạn tối đa). Zygomorphisms có vẻ là một phù hợp tốt cho các vấn đề cửa sổ trượt một khi bạn đã quen với họ.

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

tôi muốn đề cử các tác giả cho tín dụng thêm khi họ đã tránh được việc sử dụng các điểm cố định Mu functor.

+0

Từ lướt qua, tôi nghĩ rằng tôi thấy cách họ sử dụng histo khi theo dõi DRSP (theo cùng nghĩa là một 'foldr' đơn giản có thể nhìn vào danh sách nó đã được xây dựng), nhưng prepro không rõ ràng với tôi. Bạn có thể xây dựng? (và, nếu có thể, cung cấp mã ngắn + ngọt mà chúng tôi có thể truy cập vào trang wiki?) – barsoap

+3

Mã có sẵn từ một liên kết bên dưới errata trên trang đích. Định nghĩa thực tế của zygomorphism nằm trong tập tin Main.hs - nó khác với định nghĩa trong bài báo. Nó là "chỉ" một zygomorphism không phải là một "prepromorphisms zygohistomorphic" - một zygomorphism là điều gần nhất tôi đã nhìn thấy với một sử dụng thế giới thực. Mặc dù có các trang trình bày của Jevgeni Kabanov sử dụng các mô hình cho lập trình động: http://www.cs.ioc.ee/~tarmo/tday-viinistu/kabanov-slides.pdf –

Các vấn đề liên quan