
정리해보려니 기존에 정리된게 거의 없었다. 쓰기전에는 정리가 어느정도 되어있을줄 알았는데 아니었고 추후 보완해야 할 수준이다.
Haskell에서 foldr를 비롯한 함수들은 Fold 누산기의 기능을 하는데 reduce 방식의 누산기보다 많은 기능을 내포하고 있다.
foldr의 타입은 아래와 같다. 괄호 안의 타입은 함수이며 2개의 파라미터를 받아 결과값을 돌려주는 함수를 [a] 리스트에서 활용한다. 절차형에서는 for 명령으로 계산결과를 축적하듯이 [a] 리스트 요소가 실행절차마다 함수에 들어가고 b 초기값에 계속 반영되어 최종적인 b 값을 돌려준다.
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에서도 이 부분을 기초적으로 다루고 있다. 비교하자면 기본적인 리스프가 훨씬 쉽게 느껴지는데