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 修正)
創作者介紹
創作者 NS2lab 的頭像
NS2lab

『網路節點模擬』 研究日誌

NS2lab 發表在 痞客邦 留言(0) 人氣()