请帮助我简单的 tcl 代码
Please help me with the simple tcl code
这是一个简单的代码,当一个数字被提升到另一个数字时给出输出number.But它总是返回数字的平方而不是循环。
请大家帮忙
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
return $ans
}
}
只是第一眼的回答:你 return
是不是太早了?
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}
您允许循环最多进行 1 次迭代。这是因为 return
退出当前的 proc
(循环也是自动的)。
修复该部分将得到:
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}
但是..这并不能完全给你答案,是吗?您的代码逻辑不太正确。我觉得应该是:
proc raise {base pow} {
for {set base1 $base} {$pow > 1} {incr pow -1} {
set ans [expr {$base * $base1}]
set base $ans
}
return $ans
}
incr
取一个变量名,不是变量,你想迭代直到幂在1
以上。如果它是 1,那么你得到基数,因此你不会循环。最后更改为 brace the expressions. To make the above work for powers of 0
as well, you can use .
但是话虽如此,您为什么不为此使用内置运算符?
set ans [expr {$base**$pow}]
甚至:
set ans [expr {pow($base,$pow)}]
一个稍微不那么混乱的解决方案,它也给出了 $pow
= 0 的正确答案:
proc raise {base pow} {
for {set answer 1} {$pow > 0} {incr pow -1} {
set answer [expr {$answer * $base}]
}
return $answer
}
在试验代码时,少用变量和命令调用通常很有用:当您确定不能再删除它们时,您可能拥有相当高效、可读且健壮的代码.
这是一个简单的代码,当一个数字被提升到另一个数字时给出输出number.But它总是返回数字的平方而不是循环。 请大家帮忙
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
return $ans
}
}
只是第一眼的回答:你 return
是不是太早了?
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}
您允许循环最多进行 1 次迭代。这是因为 return
退出当前的 proc
(循环也是自动的)。
修复该部分将得到:
#!/usr/bin/tclsh
proc raise {{base} {pow} args} {
for {set base1 $base} {$pow >= 0} {incr $pow -1} {
set ans [expr $base * $base1 ]
set base $ans
}
return $ans
}
但是..这并不能完全给你答案,是吗?您的代码逻辑不太正确。我觉得应该是:
proc raise {base pow} {
for {set base1 $base} {$pow > 1} {incr pow -1} {
set ans [expr {$base * $base1}]
set base $ans
}
return $ans
}
incr
取一个变量名,不是变量,你想迭代直到幂在1
以上。如果它是 1,那么你得到基数,因此你不会循环。最后更改为 brace the expressions. To make the above work for powers of 0
as well, you can use
但是话虽如此,您为什么不为此使用内置运算符?
set ans [expr {$base**$pow}]
甚至:
set ans [expr {pow($base,$pow)}]
一个稍微不那么混乱的解决方案,它也给出了 $pow
= 0 的正确答案:
proc raise {base pow} {
for {set answer 1} {$pow > 0} {incr pow -1} {
set answer [expr {$answer * $base}]
}
return $answer
}
在试验代码时,少用变量和命令调用通常很有用:当您确定不能再删除它们时,您可能拥有相当高效、可读且健壮的代码.