Aby odpowiedzieć na pytanie tytułowe „Czy jakikolwiek język programowania używa zmiennych w matematyce?”: C, C #, Java, C ++ i inne języki C używają zmiennych w sposób, w jaki są używane w matematyce.
Musisz tylko użyć == zamiast =.
Jeśli wezmę twój oryginał
root(square(x)) = abs(x)
Następnie mogę przetłumaczyć to na C # bezpośrednio, bez żadnych zmian innych niż dla składni.
Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)
Spowoduje to ocenę wartości true dla dowolnej wartości x, o ile x podniesiony do kwadratu jest mniejszy niż maksimum dla używanego typu danych.
(Java będzie rażąco podobna, ale uważam, że przestrzeń nazw Math jest nieco inna)
Następnego bitu nie uda się skompilować w języku C #, ponieważ kompilator jest wystarczająco inteligentny, aby wiedzieć, że nie mogę przypisać powrotu jednej operacji do innej.
Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)
Niezmienność nie ma z tym nic wspólnego. Nadal musisz przypisać wartość w niezmiennym języku i jest całkiem możliwe, że dany język zdecyduje się to zrobić, używając = jako operatora.
Co więcej, ta pętla będzie działać do wyczerpania dopuszczalnych wartości x i uzyskania wyjątku dotyczącego przepełnienia:
while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
{
++x;
System.Console.WriteLine(x);
}
Dlatego matematycy nienawidzą używania = do przypisania. To ich myli. Myślę, że to doprowadziło cię do pomieszania się. Weź swój przykład
y = (x**2)**.5
x *= 2
assert y == abs(x)
Kiedy zamieniam to w algebrę, otrzymuję to:
abs (2x) = root (x ^ 2)
Co oczywiście nie jest prawdą dla wartości innych niż 0. Niezmienność pozwala jedynie uniknąć błędu zmiany wartości x, gdy dodasz dodatkowe kroki między oceną lewej i prawej strony pierwotnego równania. To tak naprawdę nie zmienia sposobu oceny wyrażenia.