2.4.3运算符

集合运算

集合运算包括^(交集)、&(并集)、\(差集)、|(合集)等,比如:

 

A

B

1

[a,b,1,2,3,4]

[d,b,10,12,3,4]

2

=A1^B1

=A1\B1

3

=A1&B1

=A1|B1

A1B1中的序列如下:

 

A2,B2,A3,B3中,分别计算这两个序列的交集,差集,并集和合集。计算后,A2,B2,A3,B3中的结果分别如下:

    

说明:并集与合集都是把两个序列的成员按顺序合并起来组成新序列,但并集中共同的成员不重复出现,合集中会重复出现。

在上面的集合运算中,序列中包含了不同种类的数据,既有字符,又有整数。双目运算只需比较是否相等,因此上面的代码能够正常运行,但需要注意的是,字符与整数是不能比较大小的。如果需要比较大小,如计算排序等,必须保证序列内成员数据能够比较。如:

 

A

B

C

1

[3.456,5L,,2,-3,4]

=["d","b","Ace",,"Tom","3"]

[a,b,1,2,3,4]

2

=A1.sort@z()

=B1.sort()

=C1.sort()

A1中序列的成员包括各种实数及空值,B1中的成员包括字符串或空值,A1B1中的成员均可以比较。A2B2中排序后的结果如下:

 

其中,空值null都会被认为是最小值。

C1中的序列中,既包括字符串,又包括整数,两种类型的数据是不能比较的,因此C2在计算时会报错:

对位四则运算

长度相同的两个序列可按成员进行对位计算,返回序列,包括:++(加)、--(减)、**(乘)、//(除)、(求余)%%,比如:

 

A

B

1

[1,2,3,4]

[10,12,3,4]

2

=A1++B1

=A1--B1

3

=A1**B1

=A1//B1

A1B1中的序列如下:

 

A2,B2,A3,B3中,分别用这两个序列计算对位加法,对位减法,对位乘法和对位除法。计算后,A2,B2,A3,B3中的结果分别如下:

    

布尔运算

在集算器中,用函数cmp(A,B)可以比较两个序列AB的大小。

Ø  cmp(A,B)

比较序列大小时,对位比较每个成员的值,遇到第一个不等成员时根据大小分别返回1-1AB全等则返回0。特别的,cmp(A)或者cmp(A,0),表示A和与之等长且成员均为0的数列比较,即cmp(A,[0,0,…,0])

 

A

1

=cmp(["a","b","c"],["a","b","c"])

2

=cmp([1,3,5,7],[1,3,7,5])

3

=cmp([7,6,5,4],[7,6,4,10,11])

A1,A2A3中结果如下:

   

两个序列的比较可以简写成A==B, A>B这样的形式。

通过使用这种写法,两个序列可以对位比较其大小,结果为布尔型。如:

 

A

1

=[1,2,3]==[1,2,3]

2

=[1,"B",3]<=[1,"b",4]

3

=[1,2,3]<[1,3,4]

A1中比较结果为true,两个序列相等。A2中比较结果为true,因为Bb小。A3中结果为true,因为两个序列的第2个成员比较时,23要小:

   

需要注意的是,集算器中的序列,是有序的集合,因此在判断两个序列AB是否大小相等时,是跟顺序有关的。如果需要判断的是两个序列是否有着相同的成员,需要用A.eq(B)来判断:

 

A

1

[Tom,Jerry,Tuffe,Tyke]

2

[Jerry,Tuffe,Tom,Tyke]

3

=A1==A2

4

=A1.eq(A2)

A1A2中成员的顺序不同,因此A3中的结果表明两个序列不相等:

A4中的结果为true,说明两个序列的成员相同: