FP in cpp chap2

Chap 2 함수형 프로그래밍 시작

2.1 함수가 함수를 취한다?

  • FP 언어의 주요 기능 : 함수가 일반적인 값처럼 취급될 수 있다.
  • 고차원 함수? 다른 함수를 인수로 받거나 새로운 함수를 반환하는 함수
    • ex) people -> filter(people, is_female) -> results
    • 필터는 predicate 를 전달 받을수 있으므로 고차원 함수
cf) 표기법
filter: (collection<T>, (T -> bool)) -> collection<T>
transform : (collection<In>, (In -> Out)) -> collection<Out>

2.2 STL 예제

  • STL 에 알고리즘으로 가장한 고차원 함수가 많음!
ex)
double average_score(const std::vector<int>& scores) {
    int sum = 0;
    for(int score : scores) {
        sum += score;
    }
    return sum / (double) scores.size();
}

double average_score(const std::vector<int>& scores) {
    return std::accumulate(scores.cbegin(), scores.cend(), 0) / (double) scores.size();
}

double scores_product(const std::vector<int>& scores) {
    return std::accumulate(scores.cbegin(), scores.cend(), 1, std::multiplies<int>());
}
  • 폴딩? https://en.wikipedia.org/wiki/Fold_(higher-order_function)
  • f 가 + 같은 이항 연산자라면 ?? -> 컬렉션의 모든 항목 사이에 연산자를 배치한거랑 똑같다.
  • 좌폴딩 우폴딩 다 됨 -> c++ 에서 우폴딩 하려면?? reverse iterator 쓰자
  • accumulate -> 덧셈이나 곱셈에 제한되지 않고 여러 알고리즘 구현에 쓸 수 있는 폴딩 개념을 제공
  • STL 로 구현 하는게 루프, 분기, 재귀로 구현하는것보다 더 효과적이지 않을수 있음 -> 불필요한 복사가 있을수 있다. 잘 보고 적용하자

카테고리: , ,

업데이트:

댓글남기기