2015-05-13 64 views
1

由非整數循環增量我想要實現在TCL以下C代碼:對於TCL

Float power_pitch = 8 
float offset = 7.5 
float threshold = 100 
for(i=power_pitch+offset ; i<= threshold ; i += power_pitch) 

我想要實現上述TCL for循環。我曾嘗試在TCL下面的代碼:

set power_pitch 8 
set offset 7.5 
set threshold 100 
for { set i [expr $power_pitch + $offset] } { $i <= $threshold } { incr i $power_pitch} 

,但是當我執行上面的代碼中,我得到了以下錯誤:

expected integer but got "15.5 " while executing incr i $power_pitch

你能幫我實現上面的TCL for循環?

回答

4

incr命令僅適用於整數。否則,使用:

set i [expr {$i + $power_pitch}] 

for命令本身不介意。 (注意浮動四捨五入問題;它們不是Tcl特有的,但可以使用不是2的冪的整數倍的任何東西...)

3

Donal已經提供了問題的答案,I 'd只想對for命令進行兩點觀察。

  1. for是非常接近自由形式
  2. 而不可分割的計數循環是一種典型的利用for,這絕不是唯一的選擇

for命令有大綱

forstarttest

其中開始,和是命令串(即適合作爲eval的參數;它們可以是空的,包含單個命令或者是完整的腳本)並且test是一個布爾表達式字符串(即適合作爲參數來對expr進行求值,以評估某些被強制爲或可以被強制爲布爾值的東西)。

通常,開始用於設立測試身體下一個應該把狀態逐漸接近其測試返回一個錯誤的值,但是這只是一個約定,而不是要求。以下是完全有效的(而臭)調用:

for {set n 0 ; puts -nonewline X} {[incr n] < 5} {puts -nonewline X} { 
    puts -nonewline [string repeat - $n] 
} 

for {set f [open foo.txt] ; set n 0} {$n >= 0} {puts $line} { 
    set n [chan gets $f line] 
} 

for命令字符串和布爾表達式的任意組合,它將運行。它可能永遠執行它的身體,甚至不會執行一次,但它會運行。不要將自己限制爲for {set i 0} {$i < 10} {incr i} {...}調用,那是1950年代的想法。

即使你只是想用它來計算循環,還是有很多的選擇,例如:

for {set i 0} {$i < $limit} {incr i} {...}    ;# simple increment 
for {set i 0} {$i < $limit} {incr i $n} {...}   ;# stepping increment/decrement 
for {set i 0} {$i < $limit} {incr i $i} {...}   ;# doubling increment 
for {set i 0} {$i < $limit} {set i [expr {...}]} {...} ;# arbitrary change 

釋放你的心靈,其餘的將隨之而來。

文檔:chanexprforincropenputssetstring