terser (shorter) lambda == SHORTY

这个库旨在提供比 C++ 的 Lambda 表达式更简洁的语法,而不是用惰性 DSL 替代 C++。

import shorty;
using namespace shorty::literals;
// 你不再需要记住是 `std::less` 还是 `std::greater`
std::ranges::sort(subject, $lhs > $rhs);
// 仅过滤偶数
subject | std::views::filter(($i % 2) == 0);
// 压缩并转换
std::views::zip(A,B,C,D) | std::views::transform($a * $b + $c * $d);
// 调用外部函数
auto pythagorean = $<sqrt>($a * $a + $b * $b); // 或 $call<sqrt>;
pythagorean(3.0, 4.0) == 5.0;
// 类型转换
auto to_int = $<int>($0); // 或 $cast<int>;
to_int(4.3) == 4;
// 通过索引重新映射
auto indices = std::vector<int>{...};
auto mapping = indices | $(data)[$i];

accessing arguments

如果 shorty callable 仅获得一个参数,并且该参数是 tuple_like,那么它将自动解包。这同样适用于任何惰性调用。

默认情况下,可以使用 $0...$9 语法(对于前 10 个参数)或 $arg<N> 访问参数。但是你也可以使用以下特殊参数:

querying arguments

capturing

calling functions

casting

making a tuple

assigning

特别感谢(并稍微抱怨)一位匿名阿根廷人,是他触发了这个问题。