Например, представьте себе такую функцию:Есть ли язык, на котором работает компьютерная алгебра система для дополнительных функций и оптимизации?
int solveSomeEquation(int y)
{
y = (int x) * 2;
return x;
}
Использование символической алгебры, то компилятор определяет, что х = у/2. Еще лучше, если он будет жаловаться, что Int не является достаточным для сохранения результата у/2. Представьте, что эта функциональность распространяется на решение ODE с ограничениями и/или граничными условиями и интеграцию с использованием символических или числовых методов (во время выполнения) там, где это необходимо. Я, например, очень хотелось бы увидеть что-то вроде этого:
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++, которые не имеют смысла, не обращаясь к внешнему Ноутбук Mathematica. Я хотел бы быть математиком и программистом на одном языке, в одной среде. Существует ли такая вещь?
Вы смотрели на [взрывозащищенные ассистенты] (http://en.wikipedia.org/wiki/Proof_assistant), такие как [Cog] (http://en.wikipedia.org/ wiki/Coq) с [извлечением кода] (http://coq.inria.fr/refman/Reference-Manual027.html) или [Изабель] (http://en.wikipedia.org/wiki/Isabelle_ (theor_prover)) с [извлечением кода] (http://wwwbroy.in.tum.de/~berghofe/papers/TYPES2002_slides.pdf)? –