Например, представьте себе такую функцию:
int solveSomeEquation(int y)
{
y = (int x) * 2;
return x;
}
Используя символическую алгебру, компилятор определил бы, что x = y/2. Более того, он пожаловался бы, что int недостаточно для хранения результата y/2. Представьте, что эта функциональность распространяется на решение ОДУ с ограничениями и/или граничными условиями, и интеграция с использованием символьных или числовых методов (во время выполнения), где это необходимо. Я, например, хотел бы увидеть что-то вроде этого:
int areaOfUnitSemiCircle()
{
auto semiCircleFunc = [](double x){ return abs((1 - x^2)^0.5); };
semiCircleFunc = (auto semiCircleIntegralFunc)'; // single quote means derivative
return semiCircleIntegralFunc(1) - semiCircleIntegralFunc(-1);
}
упрощено до:
int areaOfUnitSemiCircle()
{
return Pi/2;
}
Кроме того, он сможет не только локально упростить выражения внутри функции, но и выполнить оптимизацию всей программы. Он может изменить порядок выражений, чтобы улучшить числовую стабильность (уменьшить влияние ошибки с плавающей запятой) или даже полностью исключить их, используя другое представление. BigInt, число с плавающей запятой четверной точности IEEE1394, наборы, определяемые предикатом, интегрирование по кусочным функциям. Наверное, можно было бы сделать гораздо больше.
Такое возможно, нет? Я знаю, что вы можете выполнять такие вещи, используя функции языка программирования Mathematica или MatLab, но они вызываются исходным кодом. Я хочу, чтобы компилятор применил его к исходному коду. (Есть ли в этих языках такие вещи? Я не знаю.) Я люблю использовать Mathematica на работе, когда у меня есть оправдание, но тогда я получаю волшебные функции в C++, которые не имеют смысла без обращения к внешнему коду. Блокнот по математике. Я хотел бы иметь возможность быть математиком и программистом на одном языке, в одной среде. Существует ли такая вещь?