<br><br><div class="gmail_quote">On Wed, Feb 15, 2012 at 9:51 PM, Thomas Schilling <span dir="ltr">&lt;<a href="mailto:nominolo@googlemail.com">nominolo@googlemail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On 15 February 2012 16:17, Dan Maftei &lt;<a href="mailto:ninestraycats@gmail.com">ninestraycats@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; 1 When profiling my code with -auto-all, my .prof file names some sub-expressions with a backslash. Cf. below. What are these?<br>
&gt;<br>
&gt;      e_step<br>
&gt;       e_step.ewords<br>
&gt;       e_step.\<br>
&gt;        e_step.\.\<br>
&gt;         e_step.update_counts<br>
&gt;       e_step.fwords<br>
&gt;<br>
<br>
</div>Yup, those are anonymous functions.<br></blockquote><div><br></div><div>Thank you. I&#39;m still curious why other (named) expressions don&#39;t show up. I&#39;m running the profiler again now and they DO. Odd...</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
&gt;<br>
&gt; 2. A related question: I tried using the SCC pragma instead of auto-all. I added it to all seven expressions inside the let, and to the nested folds. However, only two showed up in the .prof file! How come?<br>
<br>
</div>It would be helpful if you pasted the code.  I think SCC pragmas<br>
around lambdas get ignored and you should put them inside.  (It may be<br>
the other way around, though.)</blockquote><div><br></div><div> God this is embarrassing... it&#39;s horrible code, I don&#39;t know monads yet and EM makes more sense in an imperative paradigm, but I felt like pushing the envelope and failed miserably lol. Anyways:</div>

<div><br></div><div><div><font face="&#39;courier new&#39;, monospace">e_step ttable (fsentence, esentence) (counts, totals) =</font></div><div><font face="&#39;courier new&#39;, monospace">  let</font></div><div><font face="&#39;courier new&#39;, monospace">    ewords = {-# SCC &quot;ewords&quot; -#} T.words esentence</font></div>

<div><font face="&#39;courier new&#39;, monospace">    fwords = </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;fwords&quot; -#} </span><span style="font-family:&#39;courier new&#39;,monospace">T.words fsentence</span></div>

<div><font face="&#39;courier new&#39;, monospace">    -- calculate s-total(e) map                                                 </font></div><div><font face="&#39;courier new&#39;, monospace">    sTotal = </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;sTotal&quot; -#} </span><span style="font-family:&#39;courier new&#39;,monospace">foldr (update_sTotal fwords) M.empty ewords</span></div>

<div><font face="&#39;courier new&#39;, monospace">    update_sTotal fwords e sTotal = </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;update_sTotal&quot; -#}</span></div><div><font face="&#39;courier new&#39;, monospace">      foldr (\f sTotal -&gt;</font></div>

<div><font face="&#39;courier new&#39;, monospace">              M.insertWith (+) e (getProb f e ttable) sTotal)</font></div><div><font face="&#39;courier new&#39;, monospace">      sTotal fwords</font></div><div><font face="&#39;courier new&#39;, monospace">    -- helpers for updating counts                                              </font></div>

<div><font face="&#39;courier new&#39;, monospace">    update_counts counts e f sTotal = </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;update_counts&quot; -#}</span></div><div><font face="&#39;courier new&#39;, monospace">      let !adding = (getProb f e ttable) / (sTotal M.! e)</font></div>

<div><font face="&#39;courier new&#39;, monospace">      in M.insertWith (M.unionWith (+)) f (M.singleton e adding) counts</font></div><div><font face="&#39;courier new&#39;, monospace">    update_totals totals e f sTotal = </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;update_totals&quot; -#}</span></div>

<div><font face="&#39;courier new&#39;, monospace">      let !adding = (getProb f e ttable) / (sTotal M.! e)</font></div><div><font face="&#39;courier new&#39;, monospace">      in M.insertWith&#39; (+) f adding totals</font></div>

<div><font face="&#39;courier new&#39;, monospace">  in </font><span style="font-family:&#39;courier new&#39;,monospace">{-# SCC &quot;folds&quot; -#}</span></div><div><font face="&#39;courier new&#39;, monospace">   -- update counts by iterating over words                                     </font></div>

<div><font face="&#39;courier new&#39;, monospace">   foldr (\f (!counts, !totals) -&gt;</font></div><div><font face="&#39;courier new&#39;, monospace">           foldr (\e (!counts, !totals) -&gt;</font></div><div><font face="&#39;courier new&#39;, monospace">                   let !newCounts = update_counts counts e f sTotal</font></div>

<div><font face="&#39;courier new&#39;, monospace">                       !newTotals = update_totals totals e f sTotal</font></div><div><font face="&#39;courier new&#39;, monospace">                   in (newCounts, newTotals))</font></div>

<div><font face="&#39;courier new&#39;, monospace">           (counts, totals) ewords)</font></div><div><font face="&#39;courier new&#39;, monospace">   (counts, totals) fwords</font></div><div><br></div></div></div>