mcup(f,g) = f + g + [ x -> f[x] .+ g[x] | x <- dom(f) * dom(g) ]; MCUP(l) = mcup-orio([],l); msetSumRan(f) = SUM(< f[x] | x <- dom(f) >); FUNC msetWam(ms:INT->INT,p:INT):INT RETURN SUM(< ms[n] .* n .* pot(10,p) | n <- dom(ms) >) ./ msetSumRan(ms); FUNC msetPerc(ms:X->INT):X->INT RETURN let (t=msetSumRan(ms)) in [ x -> perc(ms[x],t) | x <- dom(ms) ]; FUNC msetUnif(ms:X->INT,ff:X->X):X->INT RETURN let (f=ffinv(ff)) in [ x -> msetSumRan(ms / f[x]) | x <- dom(f) ]; ;converts X-list into (X->INT)-list cXlist2XmsetList(l) = < [ x -> 1 ] | x <- l >; ;"functorial" mcup on pairs of lists of msets mcupList(l,r) = if l == <> then <> else if r==<> then l else < mcup(head(l),head(r)) > ^ mcupList(tail(l),tail(r)); MCUPLIST(l) = mcupList-orio(<>,l); FUNC mset2TeXbarenv(ms:X->INT):TeXCmd RETURN < TeXCmd("begin",<"barenv">) > ^ < TeXCmd("setdepth",<10>)> ^ < TeXCmd("setstretch",<"1.4">)> ^ < TeXCmd("setxaxis",<0,card(dom(ms)),1>)> ^ < TeXCmd("setyaxis",<0,MAX(ran(ms)),1>)> ^ < TeXCmd("bar",) | x<-dom(ms) > ^ < TeXCmd("end",<"barenv">) >;