我尝试使用list在TCL中编写一个非常简单的程序。
以下是清单
list { 1 2 3 4 5 6 1.5 7 }
以下是我的代码
set sum 0
for {set i 0} {$i < [llength $list]} {incr i} {
incr sum [lindex $list $i]
}
puts $sum
执行上述程序时,由于列表中的浮点值为1.5,我得到以下错误
expected integer but got "1.5" (reading increment) invoked from within "incr sum [lindex $list $i]"
我在互联网上搜索,找不到任何相关内容。 请告知我如何处理浮点值?
答案 0 :(得分:3)
使用incr命令时,变量必须具有可以解释为整数的值。见tcl wiki。 如果变量是非整数实数,则无法使用[incr],但[set]可以:
set sum 0
for {set i 0} {$i < [llength $list]} {incr i} {
set sum [expr {$sum + [lindex $list $i]}]
}
puts $sum
答案 1 :(得分:3)
foreach
:
set sum 0
foreach n $list {
set sum [expr {$sum + $n}]
}
puts $sum
也可以使用::tcl::mathop::+
命令来总结数值列表:
::tcl::mathop::+ {*}$list
这看起来更复杂。 +
命令在常规命名空间中不可用,因此您需要指定它来自何处(::tcl::mathop
命名空间)。该命令期望将每个操作数作为单独的参数获取,因此如果它们在列表中,则需要使用{*}
前缀扩展该列表。
foreach
以及各种mathop
命令在此处记录:foreach,mathop。
(注意:评论中提到的'Hoodiecrow'是我,我之前使用过那个昵称。)
答案 2 :(得分:0)
如果您尝试
,Tcl会出错incr a 1.5
你必须改变逻辑。
显然你想要添加列表中的所有数字。答案很简单很多。但我会以最短的方式给你:
set l { 1 2 3 4 5 6 1.5 7 }
set sum [expr [join $l +]]
无需循环。