多重集
CPN的ML语言(CPN ML


多重集的创建

后引号 (`) 是多重集的结构符。例如,3`7的意思是有三个颜色7。

语法

i`c

整数i必须是非负的。如果为负,则将返回一个空的多重集。

例子

多重集控制符与加减号配合使用可以方便的构造多重集,如:

3`true++2`false

是一个有5个布尔量的布尔量多重集:3个ture,2个false。

常量,操作符与函数

empty 常量empty是一切多重集的空集
ms1 == ms2 两个多重集相等
ms1 <><> ms2 两个多重集不等
ms1 >> ms2 多重集大于
ms1 >>== ms2 多重集大于或等于
ms1 << ms2 多重集小于
ms1 <<== ms2 多重集小于或等于
ms1 ++ ms2 多重集加法
ms1 -- ms2 多重集减法(ms2必须小于或等于ms1),如果ms2大于ms1,则会产生减法例外(exception。 
i ** ms 纯量乘法
size ms 多重集ms的大小
random ms 在ms中返回一个伪随机颜色
cf(c,ms) 返回颜色c在ms中的数量
filter p ms 在ms内产生所有符合谓词p的的多重集
ext_col f ms 输入一个函数f和一个多重集:c1`s1++c2`s2++...++cn`sn;然后产生一个多重集:c1`f(s1)++c2`f(s2)++...++cn`f(sn)
ext_ms f ms 输入一个函数f和一个多重集:c1`s1++c2`s2++...++cn`sn;然后产生一个多重集:
c1*f(s1)++c2*f(s2)++...++cn*f(sn)
ms_to_col ms 把一个大小为1的多重集转换为单元素的多重集,如果ms的大小不为1的话会产生no_singleton例外(exception