Common Lisp 支持 (+ 1 2 3) 返回 6,(< 1 2 3) 返回 T。C++11 變參模板可實現類似功能。
#include <functional>
// 多參數比較
template<typename O, typename A, typename B>
bool cmp(O o, A a, B b) { return o(a, b); }
template<typename O, typename A, typename B, typename... C>
bool cmp(O o, A a, B b, C... c) {
return o(a, b) && cmp(o, b, c...);
}
// 多參數歸約(加法等)
template<typename O, typename A, typename B>
A reduce(O o, A a, B b) { return o(a, b); }
template<typename O, typename A, typename B, typename... C>
A reduce(O o, A a, B b, C... c) {
return reduce(o, o(a, b), c...);
}
// 使用示例
bool foo(int a, int b, int c, int d) {
return cmp(std::less<int>(), a, b, c, d);
}
int bar(int a, int b, int c, int d) {
return reduce(std::plus<int>(), a, b, c, d);
}
cmp 遞歸展開:a<b && b<c && c<d。reduce 遞歸累積:((a+b)+c)+d。std::less、std::plus 等函數對象實現通用操作。變參模板讓 C++ 具備函數式編程的表達能力。