Tcl命令操做實驗-----(6)---case foreach

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
}
相關文章
相關標籤/搜索