我想澄清参数在erlang中是如何传递的(通过值、引用)。我能';我找不到明确讨论这个话题的材料

我想澄清参数在erlang中是如何传递的(通过值、引用)。我能';我找不到明确讨论这个话题的材料,erlang,Erlang,如果我有一个作为参数列表(或数组)的函数,然后递归调用该函数,例如 calculate_something(Arr) -> calculate_something(Arr, C), calculate_something(Arr, C) -> do some stuff until some condition, calculate_something(Arr, C). 我想澄清一下,在每次调用calculate_someth

如果我有一个作为参数列表(或数组)的函数,然后递归调用该函数,例如

calculate_something(Arr) -> calculate_something(Arr, C),
calculate_something(Arr, C) -> do some stuff until some condition,
                            calculate_something(Arr, C).

我想澄清一下,在每次调用calculate_something(…)之后,新列表(或数组)将被分配为具有初始列表(数组)大小的参数,并增加内存堆栈,或者只有初始列表(数组)的引用将作为参数传递?

实际上,
Arr
作为引用。无需为
calculate\u something/2
的每次递归调用创建新的副本,因为
Arr
无法更改,因此每次调用总是绑定到相同的值。另外,
calculate\u something/2
如图所示是尾部递归的-在函数末尾的递归调用之后没有任何指令,因此即使每个递归调用传递的是一个新值而不是
Arr
,在调用之后没有理由保留
Arr
,因为一旦下一个递归调用发生,就不再需要它了

有关详细信息,请参见的