範囲に対してマップ/フォールド操作を実行できるライブラリを作成しています。これらは演算子で行う必要があります。私は関数型プログラミングにあまり精通しておらず*
、マップと||
フォールドを暫定的に選択しました。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