2017-05-03 18 views
1

기능적 프로그래밍에는 많은 패턴이 있습니다. 예 : Monoids, Monads, Functors e.t.c 그러나 이것들은 매우 높은 수준의 추상화이며 어느 것이 언제 어느 것을 사용해야하는지 정말로 모른다.기능 프로그래밍 : 추상화를 사용해야하는 경우

Monoids는 A의 여러 항목을 하나의 A 항목으로 축소하고자 할 때 유용합니다.

이러한 의미에서 각 추상화가 해결하고자하는 문제점은 무엇입니까? 은 어쩌면 우리는 monoid가 그 패턴은 프로그램에 적용하거나 또는 그렇지, 수학적 개념이다 monoid

답변

4

를 사용하여 그들은 같은 문제를 해결하는 방법을 대 발견되기 전에 프로그래머가 문제를 처리하는 방법을 표시 할 수 있습니다. 그것들 없이도 똑같은 코드를 작성할 수 있습니다. 서로 다른 데이터 유형에 대한 많은 함수가 공통 구조를 공유한다는 것을 알기 시작할 것입니다.

이 공통점을 처리하기 위해 모든 데이터 형식에 대해 서로 다른 함수가 필요 할뿐만 아니라 모든 데이터 형식에 대해 모든 도우미 함수를 다시 작성해야합니다. 이것은 추상화를 사용하려는 경우입니다. 공통 구조와 일치하는 typeclass를 확인하고 예상되는 도우미 함수를 제공 한 다음이를 데이터 유형에 적용합니다.


구체적인 예를 소개

: Monoids이 "발견"되기 전에, 모든 사람들이이 개 목록을 추가 할 ++을 사용하고, concat는 여러 목록을 추가합니다. 마찬가지로 그들은 두 개의 숫자를 더하기 위해 +을 사용했고, 복수의 숫자를 합하기 위해 sum을 사용했습니다. 만약 누군가가 하나의 값으로 접혀 있어야하는 트리를 작성했다면,리스트에 대한 하나의 구현과 숫자에 대한 하나의 구현을 각각의 연산을 사용하여 작성해야했습니다.
이제 monoid를 사용하여 구체적인 유형을 추상화하고 임의의 monoid를위한 트리 구현을 작성할 수 있습니다. 특정 작업 대신 mappendmconcat 작업을 사용하고 우리 트리는 목록과 숫자 모두에 적용됩니다. 그리고 다른 어떤 모노 노이드도.