<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On 30 Dec 2012, at 12:16, Tyron Zerafa wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div style="">I have been reading about Erlang and I am finding a problem grasping the meaning of some terms related to variables.</div><div style=""><br></div><div style="">What do global, free and unbound variables stand for in Erlang? Do they mean the same thing?</div></div></blockquote><div><br></div><div>Global variables is what Erlang doesn't have. ;-)</div><div><br></div><div>You can simulate global variables using processes or (within the scope of a process) using the process dictionary, as Michael Turner pointed out.</div><div><br></div><br><blockquote type="cite"><div dir="ltr"><div style="">Is there a notion of global/free/unbound variables in Erlang? For instance, can I somehow implement this lambda: <span style="color:rgb(0,0,0);font-family:sans-serif;font-size:13px;line-height:19.200000762939453px">y -></span><b style="color:rgb(0,0,0);font-family:sans-serif;font-size:13px;line-height:19.200000762939453px"> </b>x+y+1 ?</div></div></blockquote><div><br></div><div><br></div><div>You can do that, by passing X to the function that creates the lambda:</div><div><br></div><div>lambda(X) -></div><div>   fun(Y) -></div><div>         X + Y + 1</div><div>   end.</div><div><br></div><div>The closure will include X in its environment. Of course X will be immutable.</div><div><br></div><blockquote type="cite"><div dir="ltr">
<div style="">If Erlang does not support global/ free/unbound variables, can we say that a function does not have side-effects?</div></div></blockquote><div><br></div><div>You can't say that generally, since you can call side-effecting functions from any function. There is currently no way to guarantee that a function is pure, either through static or dynamic analysis.</div><div><br></div><div>OTOH, the number of side-effecting operations in Erlang are relatively few, so it's not too hard to determine that a function is pure in most cases. Note that any function that calls other modules will have to be treated as potentially side-effecting, since the semantics of the remote call is determined at the time of the call, and dynamic code loading can completely alter the type signature and semantics of an exported function.</div><div><br></div><div>BTW, variables are free until bound, but you cannot reference an unbound variable unless that expression also binds a value to it. In other words, an unbound variable cannot appear in the RHS of an expression. Thus, you cannot get a null reference exception in Erlang, which even Sir Anthony Hoare will agree is a Very Good Thing. [1]</div><div><br></div><div>BR,</div><div>Ulf W</div><div><br></div><div>[1] <a href="http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare">http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare</a></div><div><br></div><div><br></div></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div><div>Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.</div><div><a href="http://feuerlabs.com">http://feuerlabs.com</a></div></div><div><br></div></span><br class="Apple-interchange-newline">
</div>
<br></body></html>