계산식이 모나드와 동일합니까?


22

나는 여전히 함수 프로그래밍 (f #)을 배우고 있으며 최근에는 계산 표현식에 대해 읽기 시작했습니다. 나는 여전히 개념을 완전히 이해하지 못하고 모나드에 관한 모든 기사 (대부분 Haskell을 기반으로 작성 됨)를 읽을 때 확실하지 않은 한 가지는 계산 표현식과 모나드의 관계입니다.

이 모든 것을 작성한 후 여기 내 질문이 있습니다 (실제로 두 가지 질문).

모든 F # 계산식이 모나드입니까? 모든 모나드를 F # 계산식으로 표현할 수 있습니까?

나는 Tomas Petricek 의이 게시물을 읽었으며 그것을 잘 이해하면 계산 표현식이 모나드 이상이라는 것을 알 수 있지만 이것을 올바르게 해석할지 확실하지 않습니다.


@Raphael lang 태그를 제거하는 이유는 무엇입니까?
Grzegorz Sławecki

2
우리는 개념에 관심을 갖기 때문에 대부분의 것을 언어에 구애받지 않기 위해 노력합니다. 나는 F 번호를 제거하는 질문에 무엇을하는지 모른다 ( 나는 내가 단지 F 번호 태그를 제거 할 수 있도록 그것의 F 번호가 다음 질문은 여기에서 논외 것이 중요 있다면 생각하지만, 그것은 경계의 사건). 경험적 규칙 : F #은 CS 개념이 아니므로 태그가 필요하지 않습니다. (예, 다른 PL 태그에 대해 알고 있고 그 중 어느 것도 마음에 들지 않습니다. 일부 질문에 대해서는 커뮤니티에서 해당 태그를 보증하기로 결정했습니다.)
Raphael

1
@Raphael 나는 그 질문이 실제로 경계 사건이라고 생각합니다. 누군가 여기에서 마이그레이션하기로 결정했지만 여기에서도 약간 주제가 아닌 것 같습니다. 질문 자체는 일종의 컴퓨터이지만, 동시에 대답과 질문 모두 f #과 관련이 있습니다. 나는 당신의 경험 법칙을 이해합니다. 설명을 주셔서 감사합니다.
Grzegorz Sławecki

답변:


22

우선 계산 표현식 은 언어 기능이며 모나드 는 수학적 추상화 이므로이 관점에서 보면 완전히 다른 입니다.

그러나 그것은 매우 유용한 대답은 아닙니다 :-). 계산 표현식은 모나드 구조를 갖는 계산 (또는 데이터 유형)으로 프로그래밍하는 데 사용할 수 있지만 다른 구조와 함께 사용할 수도있는 구문을 제공하는 언어 기능입니다. 자세한 내용은 내 F # 계산 식 동물원 용지 를 읽을 수 있지만 계산 식은 다음과 함께 사용할 수 있습니다.

  • 모나드뿐만 아니라 첨가제 모나드 (어떤 Haskellers 전화 MonadPlus또는 MonadOr)
  • 구성된 계산 (하스 켈러가 모나드 변압기라고 함)
  • 모나드이지만 예외 처리와 같은 다른 F # 구문을 지원하는 계산
  • 모노 이드 (모나드 바인드가없는 몇 가지 변형)
  • 적용 펑터 (연구 확장에서만 구현되지만)

따라서 계산 표현식은 확실히 모나드와 밀접하게 연결되어 있지만 밀접하게 연결되어 있지는 않습니다. 이것은 하스켈의 do표기법 과는 대조적입니다. 예를 들어 모나드와 훨씬 더 밀접하게 연결되어 있습니다 (심지어 수학적으로 모나드가 아닌 계산에도 사용될 수 있습니다).


3
모나드 변환기는 하나의 모나드를 다른 모나드로 변환하는 일반적인 방법입니다. F # 계산 식은 변환 자체가 아니라 해당 변환의 / result /를 직접 구현 만 지원합니다.
GS-

1
@GaneshSittampalam-예, 맞습니다. 단순화하려는 나의 시도는 여기서 유용하지 않았습니다 :-). 계산식을 사용하면 모나드 변환기를 적용한 결과로 계산 작업을 수행 할 수있는 구문을 제공 할 수 있습니다 (기본 모나드 및 구성된 모나드에 대해 잠재적으로 다른 구문으로)
Tomas Petricek

5

계산식을 사용하여 모나드를 표현할 수 있습니다. 여기에 예가 있습니다 . 또한 언급했듯이 모나드 이상의 계산 표현식을 사용할 수 있습니다. 여기에 어떻게 다른지에 대한 자세한 설명이 있습니다 . 차이점을 올바르게 설명 할 공간이 없지만 계산 식은 일반적인 F # 구문을 재사용하고 추가 추상화를 추가 할 수 있다는 점에서 모나드와 다릅니다. 제한은 계산 방식에 따라 다형성 인 계산식을 작성하는 것이 비 아이디 오닉 적이며 어렵다는 것입니다.


1
최소한 링크 된 페이지의 자료를 요약하여 답변을보다 독립적으로 만드십시오. 두 링크가 작동을 멈 추면 현재 답변이 완전히 의미가 없습니다.
David Richerby

2
당신이 무슨 말을하는지 잘 모르겠습니다. 질문에 명시 적으로 답변 한 다음 질문에 관심이있는 경우 추가 정보에 대한 링크를 제공했습니다. 질문에 답하기 위해 링크가 필요하지 않습니다.
N_A

1
난 할 수 상상 두 개의 링크가 이제까지 정지 :-) 작업 수
토마스 Petricek에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.