, .
Erlang call-by-value. :
[call-by-value - ] , .
, Elixir (, , Erlang) , (, , ) , .
, :
def add(a, b), do: a + b
, , :
add(10 * 2, 5 - 3)
# becomes:
add(20, 2)
# kind of becomes:
20 + 2
# which results in:
22
, call-by-value, | . , :
|(1, [])
|(29, [1, 2, 3])
, | ( , - ).
span(1, 5), (, ) :
|(1, span(2, 5))
, | , 1 span(2, 5), span(2, 5).
:
|(1, |(2, span(3, 5)))
|(1, |(2, |(3, span(4, 5))))
|(1, |(2, |(3, |(4, span(5, 5)))))
|(1, |(2, |(3, |(4, [5]))))))
# now, it starts to "unwind" back:
|(1, |(2, |(3, [4, 5])))
|(1, |(2, [3, 4, 5]))
|(1, [2, 3, 4, 5])
[1, 2, 3, 4, 5]
(, |(), , | ).
, " , []". (span(1, 5)) [1|span(2, 5)]. , span(1, 5) , [1|span(2, 5)]: , ! span(2, 5) ..
-, : , . , , :
span(1, 5)
span(1, 5), span(2, 5)
span(1, 5), span(2, 5), ..., span(5, 5)
span(1, 5), ..., span(4, 5)
, span(1, 5) ( span(1, [2, 3, 4, 5])) , , [1, 2, 3, 4, 5].
, , , - :). , , . , , ; , :