<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/5/8 Fred Hebert <span dir="ltr"><<a href="mailto:mononcqc@ferd.ca" target="_blank">mononcqc@ferd.ca</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I was looking at an example:<br>
<br>
    1> M = #{ 1 => a },<br>
    #{ 1 => a }<br>
    2> M#{ 1.0 => b }.<br>
    #{ 1.0 => b }.<br>
    3> M#{ 1 := b }.<br>
    #{ 1 => b }<br>
    4> M#{ 1.0 := b }.<br>
    ** exception error: bad argument<br>
<br>
And given the definition where we have 'match' and 'equal' being two<br>
different things, am I right in understanding that '=>' can both create<br>
a mapping and update it based on 'equal' whereas ':=' can only update<br>
them using 'match' ?<br></blockquote><div><br></div><div style>Yes.</div><div style> '=>' is used to associate new key value pairs, or update an existing (*equal*) key.</div><div style> ':=' is used to update an existing (matching) key, or used in patterns in matching.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I don't think there is any mention of the expected behaviour when<br>
matching on #{_ := V} = #{a => 3}, unless I missed it (there<br>
were cases in map comprehensions, but these are obviously not the same).<br>
Does this need to be specified? Similarly, #{_ := V} = #{a => 1, b => 1}<br>
and #{K := 1} = #{a => 1, b => 1} do not seem specified to me.<br></blockquote><div><br></div><div style>No, #{ _ := V } = #{ a => 1} is not allowed. Only keys which are bound by the environment are allowed.</div>
<div> </div></div></div></div>