On Wed, Feb 15, 2012 at 9:51 PM, Thomas Schilling <nomin...@googlemail.com>wrote:
> On 15 February 2012 16:17, Dan Maftei <ninestrayc...@gmail.com> wrote: > > > > 1 When profiling my code with -auto-all, my .prof file names some > sub-expressions with a backslash. Cf. below. What are these? > > > > e_step > > e_step.ewords > > e_step.\ > > e_step.\.\ > > e_step.update_counts > > e_step.fwords > > > > Yup, those are anonymous functions. > Thank you. I'm still curious why other (named) expressions don't show up. I'm running the profiler again now and they DO. Odd... > > > > > 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? > > It would be helpful if you pasted the code. I think SCC pragmas > around lambdas get ignored and you should put them inside. (It may be > the other way around, though.) God this is embarrassing... it's horrible code, I don'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: e_step ttable (fsentence, esentence) (counts, totals) = let ewords = {-# SCC "ewords" -#} T.words esentence fwords = {-# SCC "fwords" -#} T.words fsentence -- calculate s-total(e) map sTotal = {-# SCC "sTotal" -#} foldr (update_sTotal fwords) M.empty ewords update_sTotal fwords e sTotal = {-# SCC "update_sTotal" -#} foldr (\f sTotal -> M.insertWith (+) e (getProb f e ttable) sTotal) sTotal fwords -- helpers for updating counts update_counts counts e f sTotal = {-# SCC "update_counts" -#} let !adding = (getProb f e ttable) / (sTotal M.! e) in M.insertWith (M.unionWith (+)) f (M.singleton e adding) counts update_totals totals e f sTotal = {-# SCC "update_totals" -#} let !adding = (getProb f e ttable) / (sTotal M.! e) in M.insertWith' (+) f adding totals in {-# SCC "folds" -#} -- update counts by iterating over words foldr (\f (!counts, !totals) -> foldr (\e (!counts, !totals) -> let !newCounts = update_counts counts e f sTotal !newTotals = update_totals totals e f sTotal in (newCounts, newTotals)) (counts, totals) ewords) (counts, totals) fwords
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe