我想在 '[list ]' 模式下列出變數回圈的“$ i”中的增量。那時,我可以用“[expr]”來計算值。
我將在這里留下一個教學示例,以簡化這個想法。看:
set i 1
while {$i <= 9} {
global value
set lst [puts -nonewline "$i "]
set value [list $lst]
incr i
}
global value
# puts [expr [lindex $value 0] [lindex $value 1]]
puts "\n$value"
結果

我的困難在于將這些連續的增量保持在一個變數中。
在這種模式下:
set value $i
只有最后一個增量/數字被添加到變數中。
正如我之前所說,我需要存盤這些數字以供以后計算。就像是:
puts [expr [lindex $value 0] [lindex $value 1]]
警告- “出于教學目的,我用序數和 '1 - 9' 的序列做了一個例子。但為了我目前正在作業的目的......我從一個或多個小數位接收亂數,我讓可以提供幫助的同事們非常清楚不要建議手動撰寫串列。一旦我從包含 1000 行編號的檔案中提取行,這意味著,我正在使用動態和非順序問題中的數字。我只做了 '1-9' 來舉例說明這個問題。我自己收到答案后,我會將解決方案調整到我的 script.tcl 中。”
uj5u.com熱心網友回復:
我通過添加一個隨機值i而不是增加 1使這更有趣一些。
set prev 0
set i 1
set i_values {}
set increments {}
while {$i <= 9} {
lappend i_values $i
lappend increments [expr {$i - $prev}]
set prev $i
set i [expr {$i rand()}]
}
puts $i_values
puts $increments
1 1.5047644425671383 2.08075066845899 2.681249232814298 3.2606203524678112 3.751028369064922 4.0385633167059 4.638428318611546 5.569515346814653 6.3491983564334 6.481541018691633 6.764665592817901 7.239382933005405 7.8137194643792345 8.687802264321506
1 0.5047644425671383 0.5759862258918518 0.6004985643553078 0.5793711196535134 0.49040801659711075 0.28753494764097765 0.5998650019056466 0.9310870282031072 0.7796830096187461 0.13234266225823355 0.28312457412626824 0.474717340187504 0.5743365313738291 0.874082799942272
uj5u.com熱心網友回復:
對于增量構建串列,您確實有兩個選項。第一個是使用lappend,第二個(從 8.6 開始)是lset與索引一起使用end 1。或者您可以預先構建一個正確長度的串列,lrepeat然后lset將值放入其中。
Tcl 的索引總是基于零或end基于。
這是一個示例,其中生成的串列的每個元素都比前兩個值的總和大 1。您需要使用兩個種子值初始化串列。
set myList {0 1}
for {set i 0} {$i < 10} {incr i} {
set v1 [lindex $myList $i]
set v2 [lindex $myList [expr {$i 1}]]
lappend myList [expr {$v1 $v2 1}]
}
puts $myList
# 0 1 2 4 7 12 20 33 54 88 143 232
請注意,您不能使用foreach來執行此操作;總是迭代固定(在呼叫時)串列值的重點文本。
uj5u.com熱心網友回復:
Glenn Jackman 的回答顯示了lappend將元素附加到 a的用法list。
Chris Heithoff在他的評論中向我澄清說,lappend在變數串列名稱前使用 $ 美元符號是一個常見的錯誤。
Donal Fellows在我陷入使用foreach-的誘惑之前就警告了我,請注意,您不能foreach這樣做;總是迭代固定(在呼叫時)串列值的重點文本。
#!/bin/ash
# \
exec tclsh "$0" "$@"
# list
set value {}
set i 1
while {$i <= 9} {
# Add the stdout in "$i" for list
lappend value $i
incr i
}
# Note that in this calculation, the left side is placed the even numbers and the Right are the Odd ones.
puts [expr [lindex $value 0] [lindex $value 1]]
puts [expr [lindex $value 2] [lindex $value 3]]
puts [expr [lindex $value 4] [lindex $value 5]]
puts [expr [lindex $value 6] [lindex $value 7]]
puts [expr [lindex $value 8] [lindex $value 9]]
結論
我變得如此依戀stdout出口,
puts相信只有他可以通過 構建串列list,我沒有意識到如果沒有這兩個命令,我可以以任何其他方式完成。盡管我嘗試使用,但
lappend我堅持結合使用,list并且在此之上還有一些錯誤的嘗試如何使用$跟隨變數,例如:lapped $value $lst現在我知道我錯在哪里了,我如何才能避免在答案中顯示的簡單解決方案上花費這么多時間。無論如何,使用`lapp
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371130.html
上一篇:如何使用while回圈在Python中列印范圍內的每個數字
下一篇:在新陣列中排序奇數,輸出問題
