콤비 네이터 란 ??
그것은이다 "아니오 자유 변수와 함수 나 정의" (SO에 정의 된대로)는?
또는 이것은 어떨까요? Arrows에 대한 그의 잘 알려진 논문에서 John Hughes 에 따르면 , "결합기는 프로그램 단편으로부터 프로그램 단편을 구축하는 함수입니다." , 이는 "... 결합기를 사용하는 프로그래머가 원하는 것을 많이 구성합니다. 모든 세부 사항을 손으로 작성하지 않고 자동으로 프로그램합니다. " 그는 말을 계속 map
하고 filter
같은 콤비의 두 가지 일반적인 예입니다.
첫 번째 정의와 일치하는 일부 결합 자 :
- 에스
- 케이
- 와이
- To Mock a Mockingbird의 다른 사람들 (내가 틀렸을 수 있습니다-이 책을 읽지 않았습니다)
두 번째 정의와 일치하는 일부 결합 자 :
- 지도
- 필터
- 접기 / 축소 (아마도)
- >> =, compose, fmap ????? 중 하나
나는 첫 번째 정의에 관심이 없다. 그것들은 내가 실제 프로그램을 작성하는 데 도움이되지 않을 것이다 (내가 틀렸다고 확신한다면 +1). 두 번째 정의를 이해하도록 도와주세요 . 맵, 필터 및 축소가 유용하다고 생각합니다.이를 통해 더 높은 수준에서 프로그래밍 할 수 있습니다. 실수를 줄이고 더 짧고 명확한 코드를 작성할 수 있습니다. 다음은 결합 자에 대한 몇 가지 구체적인 질문입니다.
- 지도, 필터와 같은 결합 자의 더 많은 예는 무엇입니까?
- 프로그래밍 언어가 자주 구현하는 결합자는 무엇입니까?
- 결합자는 더 나은 API를 설계하는 데 어떻게 도움이됩니까?
- 효과적인 결합자를 어떻게 설계합니까?
- 비 기능적 언어 (예 : Java)와 유사한 결합자는 무엇입니까? 아니면 이러한 언어가 결합 자 대신 무엇을 사용합니까?
최신 정보
@CA McCann 덕분에 이제 결합 자에 대해 좀 더 잘 이해하게되었습니다. 그러나 한 가지 질문은 여전히 저에게있어 어려운 점입니다.
결합자를 많이 사용하여 작성된 기능 프로그램과없는 프로그램의 차이점은 무엇입니까?
대답은 combinator-heavy 버전이 더 짧고 명확하고 더 일반적이라는 것입니다.하지만 가능하다면 좀 더 깊이있는 토론을 부탁드립니다.
또한 fold
일반적인 프로그래밍 언어에서 복잡한 결합 자 (즉,보다 복잡함 )에 대한 더 많은 예제와 설명을 찾고 있습니다.