Чтобы ответить на ваш заглавный вопрос «Использует ли какой-либо язык программирования переменные в математике?»: C, C #, Java, C ++ и любой другой язык стиля C используют переменные так же, как они используются в математике.
Вам просто нужно использовать == вместо =.
Если я возьму ваш оригинал
root(square(x)) = abs(x)
Затем я могу перевести это на C # напрямую, без каких-либо изменений, кроме как для синтаксиса.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Это будет иметь значение true для любого значения x, если x в квадрате меньше максимального значения для типа данных, который вы используете.
(Java будет очень похожим, но я считаю, что пространство имен Math немного отличается)
Этот следующий бит не удастся скомпилировать в C #, потому что компилятор достаточно умен, чтобы знать, что я не могу назначить возврат одной операции другой операции.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
Неизменность не имеет к этому никакого отношения. Вам все еще нужно присвоить значение на неизменяемом языке, и вполне возможно, что данный язык может сделать это, используя = в качестве оператора.
В дальнейшем подтверждая это, этот цикл будет работать до тех пор, пока вы не исчерпаете допустимые значения x и не получите исключение переполнения:
while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
{
++x;
System.Console.WriteLine(x);
}
Вот почему математики ненавидят использование = для назначения. Это их смущает. Я думаю, что это привело вас в замешательство. Возьми свой пример
y = (x**2)**.5
x *= 2
assert y == abs(x)
Когда я превращаю это в алгебру, я получаю это:
abs (2x) = корень (x ^ 2)
Что, конечно, неверно для значений, отличных от 0. Неизменность только спасает вас от ошибки изменения значения x, когда вы добавляете дополнительные шаги между оценкой левой и правой сторон исходного уравнения. Это на самом деле не меняет, как вы оцениваете выражение.