        $B%^%k%A=89g1i;;%b%8%e!<%k(B multi_set $BJBNsHGHG@bL@=q(B

$B!}3F=R8l$N;EMM(B


$B%b%8%e!<%k(B multi_set $B$N0J2<$N=R8l$K$h$j!"%^%k%A=89g1i;;$r9T$$$^$9!#(B

1. encode(L, M)
    $BF~NO!'(BL : $B@0?t$N@~7A%j%9%H(B
    $B=PNO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $B%^%k%A=89g$rI=$9(B L $B$r!"FbItI=8=7A<0(B M $B$KJQ49$7$^$9!#(B
    M $B$O!"<B9T;~$N%N!<%I?t$r(B n $B$H$7$F!"(B

            M = multiset(M1,...,Mn)
            Mi = [e(Int, Num), ...]

    $B$H$$$&7A<0$K$J$C$F$*$j!"%^%k%A=89g$NMWAG$,!"CM(B Int $B$H$=$N8D?t(B Num $B$G(B
    $BI=$5$l$^$9!#$^$?!"3F%(%s%H%j(B e(Int, Num) $B$O(B i = Int mod n $B$H$7$?$H$-(B
    Mi$B$KB0$7!"$=$l$>$l$N(BMi$BCf$G!"(BInt $B$NCM$G>:=g$K%=!<%H$5$l$F$$$^$9!#(B

2. decode(M, L)
    $BF~NO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BL : $B@0?t$N@~7A%j%9%H(B

    $B%^%k%A=89g$NFbItI=8=7A<0$r!"@0?t$N@~7A%j%9%H$KJQ49$7$^$9!#(B

3. union(M0, M1, M)
    $BF~NO!'(BM0: $B%^%k%A=89g$NFbItI=8=7A<0(B
          M1: $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $BFbItI=8=7A<0$N%^%k%A=89g(B M0, M1 $B$NOB=89g$r7W;;$7!"$=$l$r(B M $B$KJV$7$^$9!#(B

4. intersection(M0, M1, M)
    $BF~NO!'(BM0: $B%^%k%A=89g$NFbItI=8=7A<0(B
          M1: $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $BFbItI=8=7A<0$N%^%k%A=89g(B M0, M1 $B$N@Q=89g$r7W;;$7!"$=$l$r(B M $B$KJV$7$^$9!#(B

5. difference(M0, M1, M)
    $BF~NO!'(BM0: $B%^%k%A=89g$NFbItI=8=7A<0(B
          M1: $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $BFbItI=8=7A<0$N%^%k%A=89g(B M0, M1 $B$N:9=89g$r7W;;$7!"$=$l$r(B M $B$KJV$7$^$9!#(B

6. contraction(M0, M)
    $BF~NO!'(BM0: $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $BFbItI=8=7A<0$N%^%k%A=89g(B M0 $BCf$NF10lMWAG$N=EJ#$r<h$j=|$-!"$=$N7k2L$r(B
    M $B$KJV$7$^$9!#(B

7. choose(M, E, S)
    $BF~NO!'(BM : $B%^%k%A=89g$NFbItI=8=7A<0(B
    $B=PNO!'(BE : $B<h$j=P$7$?MWAG$rI=$9@0?t(B
          S : $B%^%k%A=89g$NFbItI=8=7A<0(B

    $BFbItI=8=7A<0$N%^%k%A=89g(B M0 $B$h$j!"MWAG$r0l$D<h$j=P$7!"(BE $B$KJV$7$^$9!#(B
    $B$^$?!";D$j$N%^%k%A=89g$rFbItI=8=7A<0$G(B S $B$KJV$7$^$9!#(B

    E$B$O!"FbItI=8=7A<0$G@hF,$K$"$kMWAG$,A*Br$5$l$^$9!#$^$?!"(BM $B$O$+$J$i$:(B
    1 $B8D0J>e$NMWAG$r4^$s$G$$$J$1$l$P$J$j$^$;$s!#(B


$B!}@_7W$NJ}?K(B

    $B%W%m%0%i%`$O!"4pK\E*$KF0:nB.EY$rM%@h$7$F:n@.$7$^$7$?!#(B
    $B$3$N$?$a!"(B
        $B!&%j%@%/%7%g%s%*!<%P%X%C%I$r8:$i$9$?$a!"$^$H$a$i$l$kItJ,$O0l$D$N(B
          $B@aFb$K2!$79~$s$G$7$^$$$^$7$?!#$=$N$?$a!"%(%s%3!<%I$^$o$j$J$I$O(B
          $B2DFI@-$,5>@7$K$J$C$F$$$^$9!#(B
        $B!&;EMM$G5a$a$i$l$F$$$J$$8B$j!"%(%i!<%A%'%C%/$J$I$O$9$Y$F>J$$$F$$(B
          $B$^$9!#(B

    $B$^$?!"JBNsHG$G$O!"%N!<%I4V$NDL?.$r8:$i$9$3$H$r=E;k$7$F@_7W$7$^$7$?!#(B
    $B%G!<%?$NFbItI=8=7A<0$O!"=89g1i;;=R8l$,8F$S=P$5$l$?:]$K%G!<%?J,3d$rMF(B
    $B0W$K$9$k$?$a!"$"$i$+$8$a%N!<%I8D?tJ,$N@~7A%j%9%H$N7A$GI=$5$l$F$$$^$9!#(B
    $B3F%j%9%H$O!"C`<!HG$G:NMQ$7$?!"F1$8MWAG$r$^$H$a$FMWAG?t$H8D?t$NAH$GI=(B
    $B$9$H$$$&7A$r$H$j!"=89g$N3FMWAG$,$I$N%j%9%H$KB0$9$k$+(B($B$D$^$j!"$I$N%N(B
    $B!<%I$,=hM}$rC4Ev$9$k$+(B)$B$O!"(B($BMWAGCM(B mod $B%N!<%I?t(B)$B$G7hDj$7$^$9!#(B

    $B$3$NJ}<0$G$O!"%G!<%?FbMF$KJP$j$,$"$C$?>l9g!"3F%N!<%I$N=hM}NL$,0lDj$K(B
    $B$J$i$:!"JBNs@-$,Mn$A$k2DG=@-$,$"$j$^$9!#$?$H$($P!"6v?tCM$N$_$rMWAG$K(B
    $B;}$D%^%k%A=89g$@$C$?>l9g$K$O!"%N!<%I$NH>?t$O;E;v$r$7$J$/$J$j$^$9!#(B
    $B$7$+$7!"=89g1i;;$K$*$$$F!"F1$8CM$NMWAG$,$+$J$i$:F1$8%N!<%I>e$K$"$k$3(B
    $B$H$,J]>Z$5$l$k$N$G!"%G!<%?J,3d8e$O3F%N!<%I$,DL?.$J$7$GJBNs7W;;$r9T$((B
    $B$k$H$$$&%a%j%C%H$,$"$j$^$9!#$^$?!"2>$K;E;vNL$N>/$J$$%N!<%I$,@8$8$?$H(B
    $B$7$F$b!"Ii2YJ,;6=hM}$,7Z$$$?$a!":G0-$G$bC`<!HG$HF1DxEY$NB.EY$OJ]>Z$5(B
    $B$l$^$9!#(B

    $B%G!<%?$NJP$j$KBP1~$9$k$?$a!"%P%i%s%9LZ$rEyJ,$7$F3F%N!<%I$,C4Ev$9$k$J(B
    $B$I$NJ}K!$b8!F$$7$^$7$?$,!"1i;;$N$?$S$K%G!<%?$N:FJ,;6$,I,MW$K$J$k$?$a!"(B
    $BJBNs2=$N:GBg@-G=$,$"$^$j9b$/$J$i$:!"Ii2YJ,;6$NN3EY$J$I$K$h$C$F$O!"C`(B
    $B<!HG$h$j@-G=$,Dc2<$9$k2DG=@-$b9M$($i$l$^$9!#:#2s$O!"%G!<%?$K$"$^$jJP(B
    $B$j$,$J$$$3$H$r2>Dj$7$F!"A0=R$NJ}<0$r:NMQ$7$^$7$?!#I>2AMQ$N%G!<%?$K$h(B
    $B$C$F$OJBNs@-$,Dc$/$J$k2DG=@-$O$"$j$^$9$,!"<B:]$N1~MQ$r9M$($k$H!"$[$H(B
    $B$s$I6v?tCM$r<h$k%^%k%A=89g$N$h$&$J6KC<$J>l9g$O!"$=$&$$$&@-<A$,;vA0$K(B
    $BH=$C$F$$$k$HM=A[$5$l$k$N$G!"=hM}%N!<%I$N7W;;<0$rC1$J$k%b%8%e%m$+$iE,(B
    $BEv$J<0$K=$@5$9$l$PBP1~$G$-$^$9!#(B

    $BC`<!=hM}$5$l$kC10L$K$D$$$F$O!"C`<!HG$H$[$\F1Ey$N=hM}$r9T$C$F$$$^$9!#(B
    1 $B%N!<%I>e$N=hM}C10L$O!">:=g$K%=!<%H$5$l$?(B($BMWAGCM(B, $B8D?t(B)$B$NAH$N%j%9%H(B
    $B$K$J$C$F$*$j!"$3$N7A<0$G$O!"%(%s%3!<%I=hM}$,$"$kDxEY=E$/$J$k$b$N$N!"(B
    $B1i;;$K$D$$$F$O(B union, intersection $B$J$I!"$9$Y$F%j%9%H$r0l2s%Q!<%9$9(B
    $B$k$@$1$G=*N;$7$^$9!#$^$?!"(Bcontraction $B$O3F%(%s%H%j$N8D?t$r(B 1 $B$K$9$k(B
    $B$@$1$G:Q$_$^$9!#$3$N$?$a!"0lEY%(%s%3!<%I$r9T$C$?8e!"FbItI=8=7A<0$K$h(B
    $B$k1i;;$,$"$kDxEY7+$jJV$5$l$k8B$j$O!"$+$J$j8zN($h$/F0:n$9$k$O$:$G$9!#(B

    $B%W%m%0%i%`$K$D$$$F$O!"4pK\E*$KC`<!HG$N>e$K!"%G!<%?J,;6MQ$N=R8l$rHo$;(B
    $B$?7A$K$J$C$F$$$^$9!#(B

    $B%(%s%3!<%I$rJBNs$K9T$&$?$a!"$^$:%(%s%3!<%I7A<0$N303L$H$J$k%U%!%s%/%?(B
    $B$r$D$/$j!"3F0z?t$rL$6qBN2=JQ?t$H$7$F$*$-$^$9(B(init_unbound_functor/3)$B!#(B
    $B$D$.$K!"(Bgen_encoder/3 $B$K$h$j!"C`<!HG$N%(%s%3!<%IIt$HF1Ey$N%W%m%;%9(B
    (sort/3)$B$r3F%N!<%I>e$K@8@.$7!"$=$l$>$l$,F~NO%j%9%H$r%(%s%3!<%I$7!"(B
    $B$=$N7k2L$r@h$N3FL$6qBN2=JQ?t$NCM$H$9$k$h$&$K$7$^$9!#(B
    $B<!$K!"(Bsplit_data/3 $B$K$h$j!"85$NF~NO%j%9%H$r%b%8%e%m$K$h$jJ,3d$7!"3F(B
    $B@0?t$r$=$l$,B0$9$k%N!<%I$K3d$j?6$j$^$9!#$3$3$G!"(Bsplit_data/3 $B$H!"3F%N(B
    $B!<%I>e$N(B sort/3 $B$N4V$G(B 1 $BBP(B n $B$N%9%H%j!<%`DL?.$r9T$&$?$a!"(Bdivlist/n
    $B$H$$$&%U%!%s%/%?$rMQ$$$F$$$^$9!#$3$l$O:G=i3F0z?t$,L$6qBN2=JQ?t$G$"$j!"(B
    i $BHVL\$N0z?t$r%N!<%I(B(i-1)$B>e$N(B sort/3 $B$H(B split_data/3 $B$,6&M-$7$F$$$^$9!#(B
    sort/3 $B$O$3$l$r0lHL$N(B($BF~NO(B)$B%9%H%j!<%`JQ?t$HF1MM$K07$$!"(Bsplit_data/3$B$O(B
    $B85%j%9%H$NF~NOMWAG(B Int $BKh$K!"(BInt$B$,B0$9$k%N!<%I(B (i-1) $B$rH=Dj$7!"(B
    divlist/n $B$N(B i $BHVL\$N0z?tJQ?t$r(B [Int | NewVar]$B$G6qBN2=$7$^$9!#$^$?!"(B
    $B$=$N0z?t$r(B NewVar $B$GCV$-49$($?$b$N$r?7$?$J(B divlist/n $B$H$7$F:F5"%k!<%W(B
    $B$9$k$3$H$K$h$j!"(Bsort/3 $B$NF~NO%9%H%j!<%`$KBP$7$F!"<!!9$HCM$r=PNO$9$k$3(B
    $B$H$,$G$-$^$9!#(B

    union $B$J$I$N1i;;=R8l$K$D$$$F$O!"$9$G$K%G!<%?J,3d$O=*$o$C$F$$$k$N$G!"%U(B
    $B%!%s%/%?(B multiset/n $B$N3F0z?t$r3F%N!<%I$KAw?.$7!"JBNs$K=hM}$r9T$$$^$9!#(B
    $B$3$3$G!"0JA0$K%(%s%3!<%I$d1i;;$,9T$o$l$?=89g$K$D$$$F$O!"F1$8MWAG$O:F$S(B
    $BF1$8%N!<%I$,C4Ev$9$k$N$G!"J*M}DL?.$K$h$k%G!<%?E>Aw$,@8$8$J$$$3$H$,4|BT(B
    $B$G$-$^$9!#$?$@$7!"6&M-%a%b%j4D6-$G$O$3$NMxE@$O@8$+$;$J$$$N$G!"$"$^$j@-(B
    $BG=$O$G$J$$$+$b$7$l$^$;$s!#(B


