Size: a a a

2020 June 25

LL

Lama Lover in pro.elixir
Eugene
но почему тогда работает
n * factorial(n - 1) ??

Оно не вынесено в отдельную функцию и поэтому работает, так?
А что тут тебя смущает?
источник

E

Eugene in pro.elixir
переменная прям берётся и меняется
источник

V

V in pro.elixir
да где меняется-то?
источник

LL

Lama Lover in pro.elixir
Eugene
переменная прям берётся и меняется
Где? Укажи стрелочкой
источник

LL

Lama Lover in pro.elixir
Типа вот так, как компилятор в расте
               ^
источник

SS

Sergey Shishkin in pro.elixir
функция вызывается с параметром и выдает тебе результат. ничто снаружи функции не меняется
источник

E

Eugene in pro.elixir
по сути происходит следующее присвоение n = старое n умножить на результат вычисления какой-то функции.
источник

SS

Sergey Shishkin in pro.elixir
где ты видишь выражение n=...? его там просто нет
источник

LL

Lama Lover in pro.elixir
Eugene
по сути происходит следующее присвоение n = старое n умножить на результат вычисления какой-то функции.
Да, но переменная всё равно иммутабельная. Например, в эрланге так делать нельзя, поэтому там пишут что-то типа того
def f(var) do
 var1 = var * var
 var2 = var1 + var
 var3 = var2 * var2
end
источник

V

V in pro.elixir
котаны, тут нужно просветление. дайте человеку день
источник

V

V in pro.elixir
или месяц
источник

E

Eugene in pro.elixir
def factorial(n) when n > 1 do
   n * factorial(n - 1)

знак * означает? Взять старое n и умножить на результат вычисления функции.
источник

AK

Alexander Kladov in pro.elixir
Eugene
def factorial(n) when n > 1 do
   n * factorial(n - 1)

знак * означает? Взять старое n и умножить на результат вычисления функции.
не взять старое, а взять аргумент функции и умножить
источник

E

Eugene in pro.elixir
> котаны, тут нужно просветление

я именно за ним к старшим товарищам и пришёл, прошу отнестись с пониманием...
источник

LL

Lama Lover in pro.elixir
Это иммено так и работает как ты написал
новое_n = старое_n * f(старое_n)

Можно считать, что старое_n удаляется из контекста, а новое_n просто имеет в данном контексте то же имя, что и старое
источник

SS

Sergey Shishkin in pro.elixir
он значит взять n и умножить на результат вычисления функции и все это отдать в качестве результата текущего вызова
источник

V

V in pro.elixir
Eugene
> котаны, тут нужно просветление

я именно за ним к старшим товарищам и пришёл, прошу отнестись с пониманием...
просто делай гайды по эликсиру, пиши код - и оно придёт
источник

LL

Lama Lover in pro.elixir
V
просто делай гайды по эликсиру, пиши код - и оно придёт
Удваиваю, эта вещь должна быть на уровне ощущений
источник

E

Eugene in pro.elixir
> а новое_n просто имеет в данном контексте то же имя, что и старое

Тогда где здесь иммутабельность??
источник

LL

Lama Lover in pro.elixir
Eugene
> а новое_n просто имеет в данном контексте то же имя, что и старое

Тогда где здесь иммутабельность??
Да, можно изменить значение переменной в контексте, но нельзя его изменить по указателю
источник