我正在编写可以对范围进行映射/折叠操作的库。我需要和操作员一起做这些。我对函数式编程不是很熟悉,我暂时选择*
了map和||
fold。所以要找到(蛮力算法) cos(x)
区间的最大值8 < x < 9
:
double maximum = ro::range(8, 9, 0.01) * std::cos || std::max;
在上面,ro::range
可以用任何 STL 容器替换。
如果地图/折叠运算符有任何约定,我不想有所不同。我的问题是:是否有数学符号或是否有任何语言使用运算符进行映射/折叠?
** 编辑 **
对于那些询问的人,下面是 RO 目前可以做什么的小演示。 scc
是可以评估 C++ 片段的小实用程序。
// Can print ranges, container, tuples, etc directly (vint is vector<int>) :
scc 'vint V{1,2,3}; V'
{1,2,3}
// Classic pipe. Alogorithms are from std::
scc 'vint{3,1,2,3} | sort | unique | reverse'
{3, 2, 1}
// Assign 42 to [2..5)
scc 'vint V=range(0,9); range(V/2, V/5) = 42; V'
{0, 1, 42, 42, 42, 5, 6, 7, 8, 9}
// concatenate vector of strings ('add' is shotcut for std::plus<T>()):
scc 'vstr V{"aaa", "bb", "cccc"}; V || add'
aaabbcccc
// Total length of strings in vector of strings
scc 'vstr V{"aaa", "bb", "cccc"}; V * size || (_1+_2)'
9
// Assign to c-string, then append `"XYZ"` and then remove `"bc"` substring :
scc 'char s[99]; range(s) = "abc"; (range(s) << "XYZ") - "bc"'
aXYZ
// Remove non alpha-num characters and convert to upper case
scc '(range("abc-123, xyz/") | isalnum) * toupper'
ABC123XYZ
// Hide phone number:
scc "str S=\"John Q Public (650)1234567\"; S|isdigit='X'; S"
John Q Public (XXX)XXXXXXX