<div dir="ltr">On Tue, Jan 3, 2012 at 23:21, Siddharth Karandikar <span dir="ltr">&lt;<a href="mailto:siddharth.karandikar@gmail.com">siddharth.karandikar@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I am trying out Heathrow to London problem given in Learn You a Haskell book.<br>
There is optimization tip given by author to avoid computing priceA =<br>
sum $ map snd pathA every time. I was trying to implement that like<br>
following -<br>
<br>
roadStep :: (Path, Path, Int, Int) -&gt; Section -&gt; (Path, Path, Int, Int)<br>
roadStep (pathA, pathB, cA, cB) (Section a b c) =<br>
         let forwardPriceToA = cA + a<br>
             crossPriceToA = cB + b + c<br>
             forwardPriceToB = cB + b<br>
             crossPriceToB = cA + a + c<br>
             (newPathToA, cA) = if forwardPriceToA &lt;= crossPriceToA<br>
 </blockquote><div><br></div><div>Haskell&#39;s let is recursive; you bind cA (a second time, which is often not wise) there, but forwardPriceToA also uses cA --- which, because you have introduced a local binding for cA, is going to be that local binding and not the one from the parameters.  (I think.)  So you get a binding that self-recurses forever.  Likewise for cB in the next binding.</div>
<div><br></div><div>The solution should be to introduce new names for those bindings (by convention cA&#39; and cB&#39;, but you can call them anything as long as they&#39;re different from the other names in use).</div><div>
<br></div></div>-- <br>brandon s allbery                                      <a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a><br>wandering unix systems administrator (available)     (412) 475-9364 vm/sms<br>
<br>
</div>