2008年4月1日

關於集合的基本運算



REBOL有一個unique函數,可以將一個集合內重複出現的元素移除,例如:

>> unique [1 2 1 2 3]
== [1 2 3]

REBOL有四個函數,可以進行兩個集合的計算,這四個函數分別是union、intersect、exclude、difference,其作用如圖所示。 使用union、intersect、exclude、difference所得到的結果,一定不會有重複的元素,感覺就像是使用unique處理過一樣。這是因為,一旦使用這四個函數,就等於是將引數視為「集合」,而數學上對集合的定義,本來就是不可以有重複的元素。例如:

>> union [1 2 1] [1 3 1]
== [1 2 3]

上述五個函數都具有/skip和/case兩個修飾(refinement)。/case表示區分大小寫(不加上此refinement則不會區分大小寫)。/skip需要一個整數引數n,表示每n個元素被視為一筆記錄。

這裡所謂的集合,包括了string!、block!、以及bitset!。

bitset本來就是不會重複的字元集合,所以對bitset使用unique函數並不會產生任何作用。這五個集合函數作用在bitset上的時候,不可以搭配/case或/skip。這五個集合函數用在string時,不可以搭配/skip。
請注意,unique會造成原本集合的改變,但union、intersect、exclude、difference則不會破壞原來的集合。
另外,complement函數可以用來為bitset進行反相,但是目前alpha版尚未定義實際的作法。

沒有留言: