2007.07.03
今天因為去補習,所以沒有空做太多編輯了,只好繼續來把昨天未完成的部份解決吧!!
$流程控制(control flow)----- if-else、switch、while、for、foreach
由於寫法很類似於 c 語言,所以我大略介紹:
(1)if-else => 在這裡 if 裡面的條件式要以大括號括起來,內容也是一樣用大括號。
1.if {....} {
statement1
} else {
statement2
}
2.if {....} {
statement1
} elseif {
statement2
} else {
statement3
}
(2)switch => 在這裡 switch 的內容要以大括號括起來,並且不需要 case、break 指令,只要直接列出條件和動作。
switch Value {
1 {
statement1
}
2 {
statement2
}
3 {
statement3
}
.
.
.
default {
statementN
}
}
(3)for => 在這裡 for 的內容條件要以大括號括起來,三個條件各分別括起來。
for {initial} {statement} {final} {
do something...
}
[ ps.指令 incr i 1,感覺是對於i 做加一的動作 ]
(4)while => 在這裡 while 的內容條件要以大括號括起來。
while {statement} {
do something...
}
(5)foreach => 在這裡比較跟 c 語言不同的東西,感覺可以用這個指令來宣告一個內定的陣列內容,之後再去跑迴圈
foreach vowel {a e i o u} {
puts "$vowel is a vowel"
}
此時 $vowel 的值將會從 a 開始迴圈到 u。
$程序(procedures) => 這個類似 c 語言的副函式呼叫與使用。
proc sum_proc {a b} {
return [expr $a + $b]
}
proc magnitude {num} {
if {$num > 0} {
return $num
}
set num [expr $num * (-1)]
return $num
}
#-------------------------以上是類似副函式,下面是主程式
set num1 12
set num2 14
set sum [sum_proc $num1 $num2]
puts "The sum is $sum"
puts "The magnitude of 3 is [magnitude 3]"
puts "The magnitude of -2 is [magnitude -2]"
首先看到上面是兩個副函式:sum_proc、magnitude,所以我推測 proc 可能是用來宣告副函式類似 c 語言的 viod 之類的,第一個函式有兩個參數,也就是說到時候呼叫此函式時必須放兩個參數進去,兩個參數只需要用空白區開即可,回傳指令一樣也是 return ;再看第二個函式,只有一個參數。
程式在分界線下開始呼叫以第三行開始才是重點,它宣告 sum 變數去存放 sum_proc 函式處理完回傳的值,使用副函式不需要加任何符號,直接撰寫在副函式之後即可,看此函式需要多少參數,後面就接多少參數,同樣的去看分界線下第五、六行的magnitude 函式,因為只有一個參數,所以只接一個數。
$陣列 => 感覺只是 set 用了相同的變數名稱然後以小括號做區隔
set Array(0) 1
set Array(1) 5
set Array(2) 10
.
.
.
以此範例來看,變數 Array 就形同一個陣列一樣,然而 TCL 比較不同的是,他的位置不一定是要數字,亦可使用字串等等。 ex-> set Array(name) "John",因為此時內容不為數字,因此在呼叫使用上會搭配 foreach {name...等字串} 。
[ ps.因為要一一列出陣列的"位置名稱"很麻煩,因此可以搭配指令 array names Arrays ,使用此指令就可以一一列出位置上的元素內容,對於陣列很長的很好用。]
$字串 => 可以利用 str 指令宣告一串字串,之後可以有內建的函式去使用處理此字串。
set str "Hello world!"
[string length $str]
# 回傳整個字串的長度,包含空白 Ans:12
[string index $str 3]
# 回傳整個第三個位置的內容,第一位置從零開始 Ans:l
[string range $str 4 8]
# 回傳從位置『4』開始直到位置『8』的限定範圍的內容Ans:o wor
[string first e $str]
# 回傳第一『e』的位置 Ans:1
目前認識的字串指令大約有這些,只要控制好字串位置及內容,其實就可以好好運用在程式上了。
$特殊的輸出 => 通常是用 puts 指令,使其將內容輸出在螢幕上,只要沒有特別設定的話,如今要使用指定去輸出在某檔案上。
set f [open "/tmp/file" "w"]
puts $f "Hello,How are you?"
close $f
這個指令會讓原本要輸出在螢幕上的字串『Hello,How are you?』,如今會輸出到指定的檔案(/tmp/file)的位置去。
我的問題:(1) "w" 不知道可以做什麼動作。(2) close 是否一定要加上去。
歡迎對於 NS2 有研究或見解的同學、朋友可以一起討論 by Yo PM 10:00 (2007.07.05 修正)
今天因為去補習,所以沒有空做太多編輯了,只好繼續來把昨天未完成的部份解決吧!!
$流程控制(control flow)----- if-else、switch、while、for、foreach
由於寫法很類似於 c 語言,所以我大略介紹:
(1)if-else => 在這裡 if 裡面的條件式要以大括號括起來,內容也是一樣用大括號。
1.if {....} {
statement1
} else {
statement2
}
2.if {....} {
statement1
} elseif {
statement2
} else {
statement3
}
(2)switch => 在這裡 switch 的內容要以大括號括起來,並且不需要 case、break 指令,只要直接列出條件和動作。
switch Value {
1 {
statement1
}
2 {
statement2
}
3 {
statement3
}
.
.
.
default {
statementN
}
}
(3)for => 在這裡 for 的內容條件要以大括號括起來,三個條件各分別括起來。
for {initial} {statement} {final} {
do something...
}
[ ps.指令 incr i 1,感覺是對於i 做加一的動作 ]
(4)while => 在這裡 while 的內容條件要以大括號括起來。
while {statement} {
do something...
}
(5)foreach => 在這裡比較跟 c 語言不同的東西,感覺可以用這個指令來宣告一個內定的陣列內容,之後再去跑迴圈
foreach vowel {a e i o u} {
puts "$vowel is a vowel"
}
此時 $vowel 的值將會從 a 開始迴圈到 u。
$程序(procedures) => 這個類似 c 語言的副函式呼叫與使用。
proc sum_proc {a b} {
return [expr $a + $b]
}
proc magnitude {num} {
if {$num > 0} {
return $num
}
set num [expr $num * (-1)]
return $num
}
#-------------------------以上是類似副函式,下面是主程式
set num1 12
set num2 14
set sum [sum_proc $num1 $num2]
puts "The sum is $sum"
puts "The magnitude of 3 is [magnitude 3]"
puts "The magnitude of -2 is [magnitude -2]"
首先看到上面是兩個副函式:sum_proc、magnitude,所以我推測 proc 可能是用來宣告副函式類似 c 語言的 viod 之類的,第一個函式有兩個參數,也就是說到時候呼叫此函式時必須放兩個參數進去,兩個參數只需要用空白區開即可,回傳指令一樣也是 return ;再看第二個函式,只有一個參數。
程式在分界線下開始呼叫以第三行開始才是重點,它宣告 sum 變數去存放 sum_proc 函式處理完回傳的值,使用副函式不需要加任何符號,直接撰寫在副函式之後即可,看此函式需要多少參數,後面就接多少參數,同樣的去看分界線下第五、六行的magnitude 函式,因為只有一個參數,所以只接一個數。
$陣列 => 感覺只是 set 用了相同的變數名稱然後以小括號做區隔
set Array(0) 1
set Array(1) 5
set Array(2) 10
.
.
.
以此範例來看,變數 Array 就形同一個陣列一樣,然而 TCL 比較不同的是,他的位置不一定是要數字,亦可使用字串等等。 ex-> set Array(name) "John",因為此時內容不為數字,因此在呼叫使用上會搭配 foreach {name...等字串} 。
[ ps.因為要一一列出陣列的"位置名稱"很麻煩,因此可以搭配指令 array names Arrays ,使用此指令就可以一一列出位置上的元素內容,對於陣列很長的很好用。]
$字串 => 可以利用 str 指令宣告一串字串,之後可以有內建的函式去使用處理此字串。
set str "Hello world!"
[string length $str]
# 回傳整個字串的長度,包含空白 Ans:12
[string index $str 3]
# 回傳整個第三個位置的內容,第一位置從零開始 Ans:l
[string range $str 4 8]
# 回傳從位置『4』開始直到位置『8』的限定範圍的內容Ans:o wor
[string first e $str]
# 回傳第一『e』的位置 Ans:1
目前認識的字串指令大約有這些,只要控制好字串位置及內容,其實就可以好好運用在程式上了。
$特殊的輸出 => 通常是用 puts 指令,使其將內容輸出在螢幕上,只要沒有特別設定的話,如今要使用指定去輸出在某檔案上。
set f [open "/tmp/file" "w"]
puts $f "Hello,How are you?"
close $f
這個指令會讓原本要輸出在螢幕上的字串『Hello,How are you?』,如今會輸出到指定的檔案(/tmp/file)的位置去。
我的問題:(1) "w" 不知道可以做什麼動作。(2) close 是否一定要加上去。
歡迎對於 NS2 有研究或見解的同學、朋友可以一起討論 by Yo PM 10:00 (2007.07.05 修正)
全站熱搜
留言列表