# esProc Program: Set Operators

266

Since sets are commonly used in esProc, the latter provides comprehensive set operations.

## 1. Binary Operation on Sets

The most basic set in esProc is sequence. Let’s look at some basic binary operations between two sequences A and B.

• A|B

Concatenation: Concatenate the two sequences straightforwardly. The members of B are added behind the members of A. If A or B or both A and B are single-value instead of sequences, then they will be handled as single member sequences.

• A&B

Union: Join the two sequences and remove the members of B that already exist in A. If one of A and B or both are single- value instead of sequences, then you can take them as single member sequences to process.

• A^B

Intersection: Intersection set of A and B. Get a sequence composed of members that not only exist in A but also exist in B.

• A\B

Complement: Members in A but not in B. If B is not a sequence, then treat it as the single member sequence.

• k*A

A|A|…|A, which is to concatenate the k same sequences, that is, copy A k times. Positions of k and A are interchangeable in the expression.

 A B 1 [a,b,1,2,3,4] [d,b,10,12,4,3] 2 =A1|B1 3 =A1&B1 4 =A1^B1 5 =A1\B1 6 =2*A1 7 =*8

A2, A3, A4 and A5 compute respectively the concatenation, union, intersection and complement of the sequence in A1 and the sequence in B1: In A6 and A7, sequence A1 is multiplied by an integer. The result is as follows: These basic operations – concatenation, complement, intersection and union – can also be used to deal with more complex set operations. Such as, to seek the “inverse intersection” of sets A and B, i.e., the set composed of all that is not the common members of A and B.

 A B 1 [2,3,5,8,13,21,34] [3,9,15,21,27] 2 =(A1&B1)\(A1^B1)

The result of A2 is as follows: The “inverse intersection” of two sets is the complement of their union and intersection. With this kind of transformation, more complex binary operations will be completed.

## 2. Alignment Arithmetic Operations on Sets

We can perform the alignment arithmetic operations on two sequences of the same length according to their members and return a new sequence.

• A++B

[A(1)+B(1),A(2)+B(2),…]

• A–B

[A(1)-B(1),A(2)-B(2),…]

• A**B

[A(1)*B(1),A(2)*B(2),…]

• A//B

[A(1)/B(1),A(2)/B(2),…]

• A%%B

[A(1)%B(1),A(2)%B(2),…], the % here is the Mod computation.

• A\\B

[A(1)\B(1),A(2)\B(2),…], the slash here means integer division.

 A B 1 [1,2,3] [4,1,2] 2 =A1++B1 3 =A1–B1 4 =A1//B1 5 =A1%%B1

The results of A2, A3, A4 and A5 are as follows: ## 3. A Comparison of Sets

In esProc, the function cmp(A,B) can be used to compare the sequence A and B.

• cmp(A,B)

Compare the values of members of the two sequences one by one in alignment. When the first pair of unequal members appear, return 1 if the member in A is greater than that in B; otherwise return -1. If A is identical to B, then return 0. Specifically, cmp(A) or cmp(A,0) will compare A and  the sequence with the same length and with its all members being  0, i.e. 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])

The results of A1, A2 and A3 are as follows: The comparison of two sequences can be briefly expressed as A==B, A>B.

Note that a sequence in esProc is an ordered set, so order plays an important role in comparing if the two sequences A and B are equal. A.eq(B) is used to see if the two sequences have common members.

 A 1 [Tom,Jerry,Tuffe,Tyke] 2 [Jerry,Tuffe,Tom,Tyke] 3 =A1==A2 4 =A1.eq(A2)

Because the member order in A1 and A2 is different, result in A3 is false, showing the two sequences are not equal: While result in A4 is true, showing the two sequences have the same members: 