On Wednesday 08 November 2006 05:41, DavidA wrote: > To get the result you want, take the list of (letter, probability) pairs, > and generate the Cartesian product of k copies of itself. > > cartProd 0 xs = [[]] > cartProd k xs = [x:ys | x <- xs, ys <- cartProd (k-1) xs] > > The result is all sequences of k (letter,probability) pairs, allowing > repetitions. > > Then you just need to unzip and multiply: > > (\lps -> let (ls,ps) = unzip lps in (concat ls, product ps)) >
It does the basically the same thing but, you might also want to check out the Probabilistic Functional Programming library by Martin Erwig at http://web.engr.oregonstate.edu/~erwig/pfp/ It's got all sorts of other probability goodies in it. By importing the Probability module you can define your distribution and a permute as so probDist = mkD [("A", 0.8), ("B", 0.2)] permute 0 d = mkD [] permute 1 d = d permute k d = mapD (uncurry (++)) (prod d (permute (k - 1) d)) _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
