2008年4月2日

Series函數:傳出新位置,指標不變動

Next用來傳出下一個位置,參數指標的位置不變動。

Back用來傳出前一個位置,參數指標的位置不變動。

At傳出某位置,目前的位置視為「位置1」。

Skip傳出「略過多少格位置」之後的位置。 Skip和At會有一格的差距。

At和Skip的引數都可以為負的值,這個時候,這兩個函數的結果完全一樣。


Head會傳出頭部的位置。

Tail會傳出「尾部」的位置。所謂的「尾部」,是指「最後一個元素的下一個」位置,而不是最後一個元素的位置。

不管用什麼函數,當意圖往前移動到超出邊界,會停留在頭部的位置;意圖往後移動超出邊界,則會停留在尾部的位置。

2008年4月1日

關於Unicode的一些判斷函數

utf?函數需要一個binary!當參數。根據此binary的BOM(byte order mark)來做判斷,如果傳出值的絕對值是8,則表示UTF-8;如果傳出值的絕對值為16,則表示UTF-16;如果是Big-Endian,則傳出值為正;如果為Little-Endian,則傳出值為負。 例如:

>> utf? #{EF BB BF}
== 8
>> utf? #{FE FF}
== 16
>> utf? #{FF FE}
== -16
>> utf? #{00 00 FE FF}
== 32
>> utf? #{FF FE 00 00}
== -32

如果binary不是上述的開頭,會得到0的傳出值,表示無法識別。

latin1?需要一個引數,可以是泛字串或字元或整數(表示Code Point)。如果code point都小於256,則傳出true;否則傳出false。latin1?未來有可能改成latin-1?。

ascii?函數和latin1?完全一樣,但用來判斷code point是否小於128。

關於Unicode的BOM,可以參考這篇FAQ的解釋以及這篇Wiki。REBOL的UTF?只用來判斷8, 16, 32的LE和BE的BOM,不支援其他BOM(因為其他BOM很少有人用)。

什麼是action?

action是所有資料型別都必備的基本原生函數。你可以透過下面的方式取得完整的action列表:

>> probe system/catalog/actions

每個資料型別都有一個表格(類似C++的Virtual Table),記錄此型別專屬的所有action函數。目前每個資料型別的action表格內都有68個函數。

>> length? system/catalog/actions

== 68

當你使用action函數時,此action函數會根據參數的資料型別,來決定呼叫那個表格內的對應函數,其實這是一種Polymorphism。例如,當你呼叫subtract時,它會根據參數是整數或日期或其他,來決定使用哪一個資料型別action表格內的subtract函數。

如果你使用下面的方式觀察,你會發現實際上列出來的action!不只68個:

>> ? action!

那是因為許多action都可以輕易處理掉,不需要在action表格中準備特殊的函數。這類的action函數以查詢型別的函數為大宗,例如integer?、string?。

關於集合的基本運算



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版尚未定義實際的作法。

REBOL 3.0進度:Linux and MacOS X

幾個小時前,REBOL公司推出了Linux和MacOS X平台上的core alpha測試版(螢幕截圖請見Henrik的貼文)。加上原本的Winodws版,現在已經有三個OS平台的版本了。

另外,REBOL公司預計在四月釋出REBOL 3.0 beta核心,供大眾測試。