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를 표현하는 관용적 인 방법"이라는 위키에 추가 할 것입니다. 나는 것이다 당신이 해결책을 마련하지 못한 경우이에 현상금을 넣어. 에 관한 정보를 완전히 잃어버린 경우 Edward는 reddit 에 대한 간단한 설명 을 게시했습니다 .

적합한 답변은 다음과 같아야합니다.

  1. 최소한 원격으로 그리고 이론적으로는 계산적으로 유용한 무언가를하십시오. 즉, 줄어든 답 id은 나오지 않습니다.

  2. id, const 또는 이와 동등한 것을 전달하지 않고 구성표의 모든 기능을 사용하십시오.

  3. 단순한 바닐라 폴드 등으로 똑같이 잘 표현 될 수 없으므로 product구불 구불 한 방식으로 구현하지 마십시오 .

보너스 포인트는 다음과 같습니다.

  • 잘 알려진 문제 또는 알고리즘

  • 이례적인 방식으로 각각 표현 된

  • 선명도 및 / 또는 성능

  • 해킹 가치

  • 및 / 또는 lulz와 대략 같은 순서로

  • 고위급 답변 (민주주의)

아래 의 Edward의 답변에 유의하십시오 . 사용하는 ZHPM 구현이 선택입니다.


5
IO스택에 포함했다면 SimonPJ의 유명한 launchMissles기능을 사용했을 수 있습니다 . 그러나 초순수 추상 넌센스의 모든 요점은 그러한 것들의 가능성을 피하는 것입니다.
Yitz

6
글쎄, a무엇이든 될 수 있으므로 입력 데이터 평가를 기반으로 전략적으로 미사일을 발사하는 IO 값을 자유롭게 구성하십시오.
barsoap

49
나는 당신이 무엇에 대해 이야기하고 있는지 전혀 몰랐기 때문에이 질문을 클릭했습니다. +1 좋은 선생님, +1
Drew

7
모든 구성 요소를 사용하고자하는 사람은 접합 형 형태 사전 형 재귀가 확장되는 것을 수동으로 작성하고 이러한 모든 패턴이 필요한 문제를 찾는 것이 좋습니다. 명령형 루프는 임의로 복잡한 추적을 수행하는 경향이 있으므로보기에 좋습니다.
Edward Z. Yang

3
그리고 더 중요한-그것은 혼합됩니까?! (매우 죄송합니다, 저항하지
못했습니다

답변:


52

Sharon Curtis와 Shin-Cheng Mu는 최대 밀도 세그먼트 (최대 세그먼트 합계의 일반화)를 찾기 위해 접합 형을 사용하는 기능성 진주를 사용합니다. Zygomorphisms는 익숙해지면 슬라이딩 창 문제에 적합합니다.

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

나는 그들이 고정 소수점 Mu functor의 사용을 피했기 때문에 추가 크레딧을 위해 저자를 추천합니다.


스키밍을 통해 DRSP를 추적 할 때 히스 토릭을 어떻게 사용하는지 알 수 있다고 생각합니다 (단순히 foldr이미 작성된 목록을 볼 수 있는 것과 같은 의미 에서). 좀 더 자세히 설명해 주시겠습니까? (가능한 경우 위키 페이지에 고정 할 수있는 짧고 달콤한 코드를 제공 하시겠습니까?)
barsoap

3
이 코드는 랜딩 페이지의 정오표 아래 링크에서 제공됩니다. zygomorphism의 실제 정의는 Main.hs 파일에 있습니다-논문의 정의와 다릅니다. 그것은 "zygohistomorphic prepromorphisms"가 아닌 "zygomorphism"입니다. : 동적 프로그래밍에 histomorphisms를 사용 Jevgeni Kabanov에 의해 슬라이드가 있지만 cs.ioc.ee/~tarmo/tday-viinistu/kabanov-slides.pdf
스티븐을 테 틀리

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 prepromorphism 을 구현하는 방법이 분명해야합니다 .(Base t)-BranchingdistGHisto


2
아 맞아요.
벤 롱고
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.