2008年4月6日

在Block內安插換行記號

如果你想在console將block列印出來,你可能會希望block的內容不要擠在一起。其實,你可以在block內插入一些換行的記號,你可以每個元素後面插入換行記號,或者每隔n個元素後面插入換行記號。請看下面的範例:

>> data: [ 1 "A" 2 "B" 3 "C" ]
== [ 1 "A" 2 "B" 3 "C" ]
>> new-line/skip data true 2

new-line是一個函數(不要和newline混淆了,newline是一個字元)。上面的指令意思是:在data內每隔2個元素插入一個換行記號。true表示「要加入換行記號」。執行完後,你會發現現在每兩個元素就會換行:

>> data
== [
1 "A"
2 "B"
3 "C"
]

你可以利用new-line?來判斷某block是否具有換行記號:

>> new-line? data
== true

你可以利用new-line將換行記號移除:

>> new-line/all data false
== [ 1 "A" 2 "B" 3 "C" ]

Series函數總整理

本來想要將所有和Series相關的函數全都繪製成圖,但是過去三篇貼文所呈現的效果並不好,所以做罷。現在決定將這些函數整理分類列出來就好。

【傳出位置】(指標不變動)
next:傳出下一個位置
back:傳出前一個位置
head:傳出頭的位置
tail:傳出尾的位置
at:傳出某位置(目前的位置為1)
skip:傳出某位置(目前的位置為0)

【移動位置】(指標會變動)
++:傳出目前位置,再移動到下一個
--:移動到前一個,再傳出目前的位置

【取得資訊】
index?:目前位置索引值
offset?:兩個索引值的差距
length?:剩下的個數
empty?:是否剩下的個數為0
head?:是否為頭
tail?:是否為尾
past?:是否超過尾端

【取得元素】
first:第一個元素
last:最後一個元素
pick:注意0和負的時候,R3.0和R2.x的傳出值不同。
second ... tenth:第n個元素
也可以使用path來取得元素,效果同pick

【取得元素+移動位置】(指標會變動)
first+:取得目前位置的元素,並移動到下一個位置

【取得元素+移動位置】
generate-cycle:製作循環的函數
generate-series:製作不循環的函數(cf. first+)

【取得元素+移除元素】(內容會變動)
take: first + remove

【插入元素】
insert
append(repend)

【移除元素】
remove(效果同take,但傳出值不同)
clear
remove-each

【改變】
poke
change

【複製】
copy

【尋找】
find
maximum-of
minimum-of
replace

【排列】
reverse:顛倒
random:亂排
sort:排序

【交換】
swap:交換兩個序列位置內的first元素

【建立】
array

【其他】
alter可能在3.0版中會移除。

2008年4月5日

REBOL Application Marketplace?

我記得Carl似乎曾有一個類似REBOL 3.0 Application Online Marketplace的提議,當然如果此計畫要成形,最快也會是在2009。我觀察到今年(2008)Marketplace概念有一點小熱門,包括Apple iPhone、U3、VMware、Windows、Adobe AIR、SalesForce AppExchange都有意這麼搞,或者已經在這麼搞了。連最近積極和我聯繫的一家北京軟體公司,也在做類似U3 + VMware的平台。我最近在iThome【言程序】發表了一篇Marketplace相關的文章,你可以參考。

2008年4月3日

Series函數:取得資訊

index?用來取得目前位置索引值。

offset?計算兩個索引值的差距。其實相當於「第二個引數的索引值」減掉「第一個引數的索引值」。

想知道是否在頭的位置,使用head?。

想知道是否在尾的位置,使用tail?。

length?計算剩下的個數(目前的位置算在內,但tail不算)。

想知道是否為空,可以判斷是否為尾端,或者length?是否為零,或者直接使用empty?。雖然tail?和empty?的作用一樣(事實上,empty?和tail?是完全相同的函數,所以「same? :empty? :tail?」會得到「true」),但是意義不同,寫程式時最好選擇正確意義者,以方便他人閱讀理解。

想判斷是否超過尾端,用past?。補充說明:為何會超出尾端?

(待解問題:用empty?判斷指向past的位置,會如何?)

Series函數:遞增與遞減



Series可以使用遞增(++)和遞減(--)函數,這兩個函數都會改變指標。++會傳出目前位置,再移動到下一個,新位置和傳出的位置是不一樣的。--是移動到前一個,再傳出目前的位置,新位置和傳出的位置是一樣的。為何兩者的作法不一致(++先傳出再移動,--先移動再傳出),這個問題留待迴圈的文章中解答。