<div dir="ltr"><br><br><div class="gmail_quote">2008/10/16 Lars-Åke Fredlund <span dir="ltr"><<a href="mailto:lfredlund@fi.upm.es">lfredlund@fi.upm.es</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c"><br>
</div></div>Thank you for the explanation, which made the definition much more clearer.<br>
<br>
Anyway I  wasn't worrying, I was rather hoping :-) that it was<br>
impossible to have very<br>
"complicated" expressions. In a sense having a very simple input format<br>
where "computation" (calling functions, receive, case, etc) of<br>
expressions only takes place in let arguments, and the let body only<br>
composes basic values and variables using simple data constructors. The<br>
Core Erlang output from compile:file (with option 'to_core') seems (in<br>
my limited testing experience) to respect this.</blockquote><div><br>As Richard said you can basically have full expressions everywhere. One thing to note about returning multiple values is that the compiler makes very few checks of their consistency, it does some internally within a module but none between modules. It is assumed you only return one value. Multiple values were added as a way of handling the export of variables from if/case/receive in Erlang.<br>
<br>There is a specific reason for the Erlang compiler to return code like that. In Erlang the order of evaluation is defined to be left-to-right while in Core Erlang no order of evaluation is defined. So to be certain the Erlang compiler explictily sequentialises the evaluation of code by using nested lets. The only problem with this is that some of the Core optimisation modules "assume" that the Core code has been generated like this. I discovered this doing LFE, which generates Core, and while I have only discovered two bugs (fixed in subsequent releases) I do miss out on some optimisations. :-( The way around this is to do the same sequentialisation as the Erlang compiler, which would be right anyway, bit it seems so negative. :-)<br>
</div><br>Robert<br><br></div></div>