Vivado% case abcd in a { puts 111} *bc* {puts 333} default {puts xxx} 333
爲何有輸出333呢?spa
Tcl的foreach語句:code
Vivado% set lt {1,2,3,4} 1,2,3,4 Vivado% foreach i $lt { puts "value=$i" } value=1,2,3,4
爲何只輸出一行value=1,2,3,4,而不是輸出value=1 value=2 value=3 value=4呢?(後來發現列表變量定義有問題:set lt {1 2 3 4}纔是正肯定義列表變量的語法)it
Vivado% foreach i {0 3 2 1} { switch $i { 1 {puts 111} 2 {puts 222} 3 {puts 333} default {puts xxx} } } xxx 333 222 111
將語句改成上面的形式,則輸出就有四行結果顯示了。test
還作了一些實驗,發現現象以下:變量
Vivado% foreach i {0,1,2,3} { puts "value=$i" } value=0,1,2,3 Vivado% foreach i $lt { switch $i { 1 {puts 111} 2 {puts 222} 3 {puts 333} default {puts xxx} } } xxx Vivado% foreach i lt { switch $i { 1 {puts 111} 2 {puts 222} 3 {puts 333} default {puts xxx} } } xxx
根據 上的代碼作以下實驗:foreach
Vivado% set values {1 3 4 7 2 4 6 8} 1 3 4 7 2 4 6 8 Vivado% foreach x $values { puts "$x/t [expr {$x**2}]/t [expr {$x**3}]" } 1/t 1/t 1 3/t 9/t 27 4/t 16/t 64 7/t 49/t 343 2/t 4/t 8 4/t 16/t 64 6/t 36/t 216 8/t 64/t 512
break語句:中斷循環執行並退出循環
continue語句:下一循個迭代環語法
Vivado% foreach x $values { if {$x==6} { break } if {$x==4} { continue } puts "$x/t [expr {$x**2}]/t [expr {$x**3}]" } 1/t 1/t 1 3/t 9/t 27 7/t 49/t 343 2/t 4/t 8
上面代碼每次遇到4的時候都會跳過。command
while循環語句:while
Vivado% set i 1 1 Vivado% while {$i != 5} { puts $i incr i } 1 2 3 4
Vivado% while $i != 5 { puts $i incr i } wrong # args: should be "while test command" Vivado% while ($i != 5) { puts $i incr i } wrong # args: should be "while test command" Vivado% while "$i != 5" { puts $i incr i }