请建议改进我的计划。该程序提供4位二进制增量o / p 我正在寻找在没有不必要的代码的地方进行优化。
请建议改进我的计划。该程序提供4位二进制增量o / p 我正在寻找优化这个有不必要代码的地方。 请建议改进我的计划。该程序提供4位二进制增量o / p 我正在寻找在没有不必要的代码的地方进行优化。
#!/bin/sh
# This
puts "+++++++++++++++++\n"
set ipaddr "0.0.0.0"
set limit 4
set splitip [split $ipaddr "."]
puts "Split ip address = $splitip"
# MAIN ROUTINE
set ilength [llength $splitip]
puts "Length of string is $ilength"
set first [lindex $splitip 0]
set sec [lindex $splitip 1]
set third [lindex $splitip 2]
set four [lindex $splitip 3]
for { set limit 1} { $limit >0} {} {
for { set first $first } { $first <= $limit} {} {
for { set sec $sec } { $sec <= $limit} {} {
for { set third $third } { $third <= $limit} {} {
for { set four $four } { $four <= $limit} {} {
puts " f:$first $sec $third $four"
incr four
}
set four 0
incr third; #puts " t:$four $third $sec $first\n"
}
set third 0
incr sec
}
#puts " f:$four $third $sec $first"
set sec 0
incr first
}
incr limit -1
}
# End Main
puts "\n++++++End Program+++++++++++"
答案 0 :(得分:1)
你的程序基本归结为此,这是否符合你的意图?
for { set first 0 } { $first <= 1} {incr first} {
for { set sec 0 } { $sec <= 1} {incr sec} {
for { set third 0 } { $third <= 1} {incr third} {
for { set four 0 } { $four <= 1} {incr four} {
puts " f:$first $sec $third $four"
}
}
}
}
因为如果是这样,主要的建议就是删除除此之外的所有内容。
另外:[llength $splitip]
不会给你字符串长度$splitip
,但列表长度。那些是不同的。
您正在使用非常迂回的方式为first
等人分配值。相反,使用
lassign $splitip first sec third four
在Tcl 8.5中添加了lassign
。如果您使用的是较旧版本的Tcl,请改为使用foreach
分配:
foreach {first sec third four} $splitip break
构造
for { set limit 1} { $limit >0} {incr limit -1} { ... }
只是意味着“执行......恰好一次”:它不会以任何方式影响程序的执行。即使你删除它(将代码保留在 body 参数中),其中的代码仍然只执行一次。
为清楚起见,incr x
调用应该在for
的第三个参数内,而不是在第四个 body 参数内。
最后要注意的是,如果你打算打印出一系列二进制数字,那么这样做会容易得多:
for {set i 0} {$i < 16} {incr i} { puts [format %04b $i] }