Haskell 에서 Fold


정리해보려니 기존에 정리된게 거의 없었다. 쓰기전에는 정리가 어느정도 되어있을줄 알았는데 아니었고 추후 보완해야 할 수준이다.

Haskell에서 foldr를 비롯한 함수들은 Fold 누산기의 기능을 하는데 reduce 방식의 누산기보다 많은 기능을 내포하고 있다.

foldr의 타입은 아래와 같다. 괄호 안의 타입는 함수이며 2개의 파라미터를 받아 결과값을 돌려주는 함수를 [a] 리스트에서 활용한다.

foldr :: (a->b->b)->b->[a]->b

최종결과는 단일값일 것이다. b type는 초기값과 결과값의 타입이다.

누산기는 이하와 같이 하나씩 적용된다.

foldr f acc (x:xs) = f x ( foldr f acc xs )


(:)는 콘셀이다. 리스트 요소마다 f 가 접합되며 f는 주로 함수가 된다.

map 함수는 아래와 같다. 각 리스트마다 함수를 적용한다.

fmap :: (a->b) -> f a -> f b

filter 함수는 a형 리스트에서 요소를 개별적으로 평가하는 함수를 통과시켜 새로운 리스트를 반환한다.

filter :: (a->bool) -> [a] -> [a]

결론적으로 리스트 처리함수의 type만 다룬듯 하다.

여러 매핑 함수들이 리스트 프로세싱의 개념으로 다루어지는데 LISP에서도 이 부분을 기초적으로 다루고 있다. 비교하자면 기본적인 리스프가 훨씬 쉽게 느껴지는데

Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다