Các ứng dụng trong thế giới thực của tiền chất zygohistomorphic


156

Vâng, những cái này :

{-#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 trò đùa ( HHOS ). Tôi đang tìm một ví dụ trong thế giới thực cho 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 rằng "Đây là cách thành ngữ để thể hiện XYZ". Tôi sẽ đặt tiền thưởng cho việc này nếu bạn không đưa ra giải pháp. Nếu bạn hoàn toàn lạc lối về những gì họ đang nói, Edward đã đăng một lời giải thích ngắn trên reddit.

Câu trả lời đủ điều kiện phải:

  1. làm một cái gì đó ít nhất từ ​​xa và lý thuyết tính toán hữu ích. Đó là, câu trả lời mà giảm idra.

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

  3. không thể biểu hiện rõ bằng một nếp gấp đơn giản như vậy, vì vậy đừng đơn thuần thực hiện producttheo cách uốn khúc.

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

  • Vấn đề hay thuật toán nổi tiếng

  • giải quyết, tương ứng được thể hiện, theo một cách bất thường mà đạt được

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

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

  • và / hoặc lulz, theo thứ tự đó, cũng như

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

Xin lưu ý câu trả lời của Edward bên dưới. Những gì ZHPM thực hiện bạn sử dụng là sự lựa chọn của bạn.


5
Nếu bạn đã bao gồm IOtrong ngăn xếp của mình, chúng tôi có thể đã sử dụng launchMissleschức năng 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 trừu tượng siêu thuần túy này là để tránh khả năng xảy ra những điều như vậy.
Yitz

6
Chà, acó thể là bất cứ điều gì, vì vậy hãy thoải mái xây dựng một giá trị IO có thể phóng tên lửa một cách chiến lược dựa trên đánh giá dữ liệu đầu vào của bạn.
barsoap

49
Tôi nhấp vào câu hỏi này vì tôi không biết bạn đang nói về cái quái gì. +1 tốt thưa ngài, +1
vẽ

7
Ai đó đang tìm cách sử dụng tất cả các thành phần sẽ làm tốt để viết thủ công những gì một đệ quy tiền hình zygohistomorphic mở rộng đến, và sau đó tìm kiếm các vấn đề cần tất cả các mẫu này; các vòng lặp bắt buộc có xu hướng theo dõi phức tạp tùy ý, vì vậy chúng có thể là một nơi tốt để xem xét.
Edward Z. Yang

3
và quan trọng hơn - Nó sẽ pha trộn?! (rất xin lỗi, không thể cưỡng lại)
n00b

Câu trả lời:


52

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

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

Tôi sẽ đề cử các tác giả để có thêm tín dụng vì họ đã tránh sử dụng Mu functor điểm cố định.


Từ việc 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 đơn giản foldrcó thể nhìn vào danh sách mà nó đã xây dựng), nhưng prepro không rõ ràng ngay lập tức đối với tôi. Bạn có thể giải thích? (và, nếu có thể, hãy cung cấp mã ngắn + ngọt mà chúng ta có thể truy cập vào trang wiki?)
barsoap

3
Mã này 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 zygantic là trong tệp Main.hs - nó khác với định nghĩa trong bài báo. Đó là "chỉ" một hợp tử không phải là "tiền chất zygohistomorphic" - một hợp tử là điều gần gũi nhất mà tôi thấy với việc sử dụng trong thế giới thực. Mặc dù có các slide của Jevgeni Kabanov bằng cách sử dụng mô hình cho lập trình động: cs.ioc.ee/~tarmo/tday-viinistu/kabanov-slides.pdf
tethen tetley 21/211

39

Lưu ý, chữ ký của những thứ này đã thay đổi, vì nó không đủ chung chung và tôi đã bao gồm nó (như một trò đùa) trong gói đệ quy 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 thực hiện cũng được đơn giản hóa.

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

Và từ việc triển khai mới, rõ ràng làm thế nào để thực hiện một prepromorphic zygohistomorphic tổng quát , bằng cách nới lỏng các ràng buộc mà bạn có một (Base t)-Branchingluồng, thông qua việc sử dụng distGHistothay thế.


2
À vâng khá rõ ràng.
Ben Longo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.