2009-03-20 4 views
16

연속체를 모나드라고 할 수 있습니까? 그것들은 모나드의 하위 집합입니까 아니면 단순히 모나드를 구현할 수있는 방법입니까?연속체 모나드입니까?

편집 : 아니면 내가 잘못했고 모나드연속성을보다 더 추상적 인 개념이다? (그래서 나는 실제로 사과를 오렌지와 비교하고 있습니다.)

+1

Continuations를 모든 것을입니다. 연속성은 데이터 구조를 구현할 수 있습니다. 연속체는 클래스와 객체를 구현할 수 있습니다. 연속성은 모나드를 구현할 수 있습니다.나는이 질문이 하스켈과 어떤 관계가 있는지 보지 못한다.하지만 연속체와 모나드를 제외하면 ... – ephemient

+0

나도 마찬가지다. 처음에는 Haskell 태그를 추가하지 않았고 솔직히 다른 컨텍스트의 설명에 더 관심이 있습니다. – troelskn

+1

@troelskn : 편집에 동의합니다. 연속은 모나드와 다른 짐승이다. 나무 판자가 집인지 아닌지 묻는 것과 조금 다릅니다. 그것들은 같이 합쳐지면 될 수 있습니다. 그러나 그들은 또한 다른 많은 것들이 될 수 있습니다. –

답변

17

간단히 말하면, 모나드의 '바인드'는 유효한 연속 ('나머지 계산'의 람다)을 인수로 사용하기 때문에 모나드는 그 의미에서 연속입니다. 반대로, 연속 통과 스타일은 모나 딕 구문 설탕을 사용하여 비 CPS 언어로 효과적으로 구현 될 수 있습니다. 하스켈에서 자습서 '모나드에 대한 모든'에서

:

https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad

'휴식'을 구현하고

http://cs.hubfs.net/forums/thread/9311.aspx을위한 - 스타일 루프에 대해 '계속'을하는 데 사용

F #의 연속 모나드,

그리고 F #에서 문제가 계속 모나드를 적용의 예 :

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!256.entry

6

꼭 그래야 할 필요는 없습니다. 나는 당신의 질문을 조금 뒤집어서 대신 모나드가 연속체를 구현하는 방법이라고 말한다. 그러나 여러 방법으로 연속체를 구현할 수 있습니다. C#에서 겸손하면서도 제한적인 CPS의 팩시밀리를 너무 많이하지 않고도 수행 할 수 있습니다 (for example). 아주 철저한 치료를 위해 하스켈 사이트의 The Continuation Monad을보십시오.

+0

조금 흥분했지만 C#에서는 CPS가 아닙니다. 그것은 함수를 취하고 그 함수에 의해 리턴 된 값을 호출자에게 리턴하는 유틸리티 함수입니다. CPS와는 아무 관련이 없습니다. –

+0

틀린 링크입니다. 결정된. 언급했듯이, 이것은 CPS에 대한 근사치 일 뿐이며 실제 CPS는 아닙니다 (저는 이것이 C#에서는 가능하지 않다고 생각하지만 좀 더 생각해야합니다). –

22

연속체 모나드뿐 아니라 지속성과 상태가 있다면 기능적 모나드를 시뮬레이트 할 수 있다는 의미에서 보편적 모나드입니다. 이 인상적하지만 고도의 기술 결과 1994 또는 그 부근에 쓴 Andrzej Filinski의 인상적이고 고도의 기술 마음에서 온다 :

우리가 보여 그 누구의 장치와 확장 작업을 순수하게 기능적인 용어에 내장 될 수있는 표현 될 수있는 모든 모나드 가치있는 언어로 "구성 가능한 연속"을 사용합니다. 그 주제에

+0

나는 결과가 인상적이라고 동의한다. 이 임베딩은 "구분 된"(Filinski가 "구성 가능"이라고 말함) 연속이라는 언어로되어 있음에도 불구하고 밑줄을 긋게합니다. 이것들은 Scheme의 call/cc로부터 전달 된 연속 값보다 강력합니다. – dubiousjim

+2

@profjim : 실제로 Filinski는 일반적인 연속과 상태를 사용하여 구분 된 연속을 구현하는 방법을 보여주었습니다. 그는 callcc를 사용하여 SML/NJ에서 모든 것을 구현했습니다. – RD1

4
+2

+1 sigfpe의 블로그를 인용. 참으로 아름다운 보물. 저자는 카테고리 이론 및 기타 멀리 떨어진 개념을 세밀하고 계몽 적이지 만 지구에 맞게 설명합니다. 내 책에서 가장 똑똑한 사람들은 최고의 교사입니다. –

1

을 계속할 프로그램의 특정 기능입니다. 모나드는 타입 생성자입니다.

유형의 연속성에 대한 유형 생성자 Cont<T>은 모나드가 아닙니다.

그러나 Cont<Cont<T>>은 모나드이며 일반적으로 "연속 모나드"라고합니다.

(언어로 갖는 callcc는 TCont<Cont<T>> 변환 할 수있는 동일합니다.)