<br><br><div class="gmail_quote">On Tue, Mar 11, 2008 at 12:05 PM, Christian S <<a href="mailto:chsu79@gmail.com">chsu79@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">> It is misunderstand what record is. Record is not this sort of things. Use<br>
> our own structure for this purpose. Record is not object, hash, dictionary<br>
> or whatever you really want. Record is not designed for some sort of<br>
> inheritance. Record is structure for memory friendly storage of fixed<br>
> "records" a which one will be changed very rare and just only by design.<br>
<br>
</div>That is what they are.  What we want might be something else though.<br>
<br>
<br>
Thinking out loud:<br>
<br>
Would it be possible to create a pattern matching syntax for some kind<br>
of association map?<br>
<br>
As I understand it, guards without near O(1) properties are not that<br>
popular. But others do exist already.<br>
<br>
Perhaps something that recognizes {[Fields::atom()],<br>
FieldValue1::term()} so that<br>
both {[gurka, avocado, sallad, dressing], 1, 2, 3, 4} and {[tacos,<br>
salsa, avocado], 8, 4, 2} could be<br>
matched when asking for avocado=2 in this something.<br>
<br>
%% What better character to use for a beta feature than ß !!?<br>
cook(ß{avocado=1}) -><br>
   guacamole().<br>
</blockquote><div><br>You can wrote [{gurka,1}, {avocado,2}, {sallad,3}, {dressing,4}] and [{tacos,8},<br>{salsa, 4}, {avocado, 2}] and<br><br>cook(L) -><br>    case proplist:get_value(avocado, L) of<br>         2 -> guacamole()<br>
    end.<br><br>Your ß guard is not O(1) like mine solution. But again, it is not records use case. You can make our own solution and erlange give you enough power to do it and do it elegant. At least you can make your own parse transform to do it with syntax sugar.<br>
If {[gurka, avocado, sallad, dressing], 1, 2, 3, 4} and {[tacos,<br>
salsa, avocado], 8, 4, 2} are #a{gurka= 1, avocado=2, salad=3, dressing=4} and #b{tacos=8, salas=4, avocado=2} you can simply wrote<br><br>cook(#a{avocado=2}) -><br>
   guacamole();<br>

cook(#b{avocado=2}) -><br>

   guacamole().<br><br>I know, this solution is only for finite number of record types and there is nice solution for huge amount of records, look for records helper function (8.7 in <a href="http://erlang.org/doc/reference_manual/records.html">http://erlang.org/doc/reference_manual/records.html</a>). And again, you are looking for some other construct than record.<br>


<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
<br>
The real wart in record _syntax_ is when you update a record in a<br>
record ( in a record ( in a record ...)).<br>
</blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil