Я разместил следующий код на rosettacode.org для задачи преобразования арабских и римских цифр .
import std.regex, std.array, std.algorithm;
immutable {
int[] weights = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
string[] symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX",
"V", "IV", "I"];
}
string toRoman(int n) {
auto app = appender!string;
foreach (i, w; weights) {
while (n >= w) {
app.put(symbols[i]);
n -= w;
}
if (n == 0) break;
}
return app.data;
}
int toArabic(string s) {
int arabic;
foreach (m; match(s, "CM|CD|XC|XL|IX|IV|[MDCLXVI]")) {
arabic += weights[symbols.indexOf(m.hit)];
}
return arabic;
}
Раньше он работал нормально, но теперь я получаю ошибку компилятора.
Ошибка: шаблон
std.algorithm.indexOf (псевдоним pred = "a
== b ", R1, R2) если (есть (typeof (начинается с! (пред)) (стог сена, игла
е)))) не соответствует ни одной функции
шаблон объявления
Согласно документации indexOf устарел, и вместо него следует использовать countUntil, но он выдает мне ту же ошибку.