반응형
high-order function
함수형 프로그래밍 (functional programming)에서 함수는 고차 함수 (high-order)와 일차 함수 (first order)로 나뉜다. 고차 함수는 함수를 인자로 받거나 반환하는 형태를 의미하며, 일차 함수는 고차 함수가 아닌 모든 함수를 의미한다.
고차 함수가 필요한 이유는 고차 함수의 인자로 들어온 함수를 통해 데이터를 재귀적 (또는 반복적)으로 처리하기 위함이다.
#include <iostream>
auto twice = [](auto f, int v) { return f(f(v)); }
auto f = [](int i) { return i + 3; }
int main() {
std::cout << twice(f, 7) << std::endl;
}
Output: 13
fold
Fold는 고차 함수 계열 중 하나로, 함수의 인자에 대해 특정 연산자를 재귀적으로 처리하고 결과를 반환하는 함수를 의미합니다.
Syntax
// fold expression
// (E op ...) | (e1 + (e2 + (e3 + (e4 ... ))))
// (... op E) | ((((e1 + e2) + e3) + e4) ... )
// (E op ... op I) | (I + (e1 + (e2 + (e3 + (e4 ... )))))
// (I op ... op E) | ((((e1 + e2) + e3) + e4) ... + I )
Sample Code
using namespace std;
// left fold is more easier to understand
template <typename... Ints>
int sum_all(Ints... nums) {
return (... + nums);
}
template <typename... doubles>
double sub(doubles... args) {
return (10 - ... - args);
// 10 - 1 - 2 - 3 - 4
}
int main() {
cout << sum_all(1, 4, 2, 3, 10) << endl;
cout << sub(1, 2, 3, 4) << endl;
}
반응형
'💻 programming > c++' 카테고리의 다른 글
[c++] RapidJson 사용하기, c++에서 JSON 파싱하기 (0) | 2023.09.13 |
---|---|
[c++] TCP/IP 서버 클라이언트 설명 및 예제 코드 (소켓 프로그래밍) (0) | 2023.03.20 |
[c++] logger 클래스 만들기 (0) | 2021.08.04 |
[c++] timer 클래스 만들기 (0) | 2021.08.04 |
[c++] thread vs task (thread 와 async) (0) | 2021.08.04 |
댓글