2014-12-09 2 views

답변

0

일반적으로 함수는 프로그램의 모듈을 나타냅니다. 반면에 Combinators는 같은 의미로 모듈을 나타내지 않습니다. 대신 모듈을 전체 프로그램에 결합하는 데 사용됩니다.

결합자는 2 개 (또는 그 이상)의 값을 결합하여 결과가 결과의 일부인 방식으로 결합합니다. 연결자를 인식하는 방법은 자신의 결과와 동일한 (또는 유사한) 유형의 인수를 적어도 하나 이상 가져야한다는 것입니다. 따라서, 예를 들어, many (의사 하스켈) : 그것은 파서를 취하고 파서를 반환하고 파서 p 때문에 파서 many p의 일부이기 때문에

many :: Parser a -> Parser [a] 

연결자이다.

length :: [a] -> Int 

는 대부분의 인수에서 정보의 파기 때문에이 목록을 소요하지만, Int을 반환하고, 모두 있기 때문에, 연결자 없습니다. 이 Int의 소요와 Int 반환하면서, 여전히 인수의 정보의 일부가 삭제 becase

(+) :: Int -> Int -> Int 

도 연결자 아니다; 23은 실제로 동일한 부분이 아닙니다 5pmany p의 일부입니다.

직관은 프로그램을 작성할 때 입력의 첫 번째 비트를 구문 분석하고이 반복 된 요소를 구문 분석 한 다음 나머지 구문을 구문 분석하고 구문 분석 트리를 함께 넣는 것으로 시작한다는 점입니다. 그런 다음 최종 프로그램을 얻기 위해 그들에게 콤비를 적용, 그 조각을 코드 :

putThePiecesTogether <$> parseTheFirstBit <*> many parseRepeatedBit <*> parseTheRest 

[1] 또한 '0 인수'콤비 (상수 또는 다른 유형의 단지 기능을 할, 콤비 라이브러리에서 온 연결자). 그것들은 라이브러리의 중요한 부분이기도하고 아마도 자신들의 결합 자일 것입니다. 그래서 실제 규칙은 결합 자 (combinator)가 라이브러리의 대부분의 함수가 동일한 유형의 값을 취하고 반환한다는 것입니다. 결과의 '일부분'이다.

관련 문제