I figured you'd had a good reason for doing it the way you did. Konrad Hinsen wrote: > On 24.12.2009, at 05:18, jim wrote: > > > I was looking at the probability monad today and think this definition > > of m-bind might be easier to understand. > > > > (defmonad dist-m > > [m-result (fn m-result-dist [v] > > {v 1}) > > m-bind (fn m-bind-dist [mv f] > > (reduce (partial merge-with +) > > (for [[x p] mv > > [y q] (f x)] > > {y (* q p)}))) > > ]) > > > > What do you think? > > I agree. In fact, I had reinvented merge-with because I wasn't aware > of its existence. > > > Also, I was thinking about cond-dist-m. What if dist-m was redefined > > to be this > > > > (defmonad dist-m > > [m-result (fn m-result-dist [v] > > {v 1}) > > m-bind (fn m-bind-dist [mv f] > > (if (empty? mv) > > {} > > (reduce (partial merge-with +) > > (for [[x p] mv > > [y q] (f x)] > > {y (* q p)})))) > > m-zero {} > > m-plus (fn m-plus-dist [& mvs] > > (if-let [mv (first (drop-while empty? mvs))] > > mv > > {})) > > ]) > > > > I think that would roll cond-dist-m into dist-m, eliminating the need > > for a seperate monad. Don't know if you'd thought of that and > > discarded it or not. > > At first glance I doubt that this works. Did you try it? > > Your m-bind looks equivalent to the one of my original dist-m, with > just an optimization for the case of an empty map. If that is true, > then your dist-m can't include the features of cond-dist-m, which > require a different m-bind. > > It is in fact essential for cond-dist-m not to eliminate invalid > values from the distributions immediately, but to accumulate their > weights into the map entry for some special value (nil in my > implementation). Otherwise the probabilities come out wrong for multi- > step computations containing more than one :when clause. > > Konrad.
-- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en