Linux 请帮助我使用简单的tcl代码

Linux 请帮助我使用简单的tcl代码,linux,tcl,Linux,Tcl,这是一个简单的代码,当一个数字上升到另一个数字时,它会给出输出。但它总是返回数字的平方,而不是循环。 请帮帮我 #!/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 } } 第一眼就知道答案:你返回不是太早了吗 #!/usr/bi

这是一个简单的代码,当一个数字上升到另一个数字时,它会给出输出。但它总是返回数字的平方,而不是循环。 请帮帮我

#!/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
}
}

第一眼就知道答案:你
返回
不是太早了吗

#!/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
}

第一眼就知道答案:你
返回
不是太早了吗

#!/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,那么你得到的基础,因此你不循环。最后一个变化是。要使上述函数也适用于
0
的幂次函数,可以使用

但是所有这些都说明了,为什么不使用内置操作符呢

set ans [expr {$base**$pow}]
甚至:

set ans [expr {pow($base,$pow)}]

您允许循环最多进行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,那么你得到的基础,因此你不循环。最后一个变化是。要使上述函数也适用于
0
的幂次函数,可以使用

但是所有这些都说明了,为什么不使用内置操作符呢

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
}
在试验代码时,吝啬变量和命令调用通常是有用的:当您确定无法消除任何变量和命令调用时,您可能拥有相当高效、可读且健壮的代码


文档:,,,

一个稍微不那么凌乱的解决方案,它也为
$pow
=0提供了正确的答案:

proc raise {base pow} {
    for {set answer 1} {$pow > 0} {incr pow -1} {
        set answer [expr {$answer * $base}]
    }
    return $answer
}
在试验代码时,吝啬变量和命令调用通常是有用的:当您确定无法消除任何变量和命令调用时,您可能拥有相当高效、可读且健壮的代码


文档:,,,

为什么不使用内置运算符将另一个数字提升到某个幂?为什么要返回循环?这与使用内置运算符无关。“是关于找到问题的答案的,兄弟。”卡洛里·霍瓦思——我两次都试过了。这两种方式都不起作用,即使我将其从循环中返回。当我试图在循环外返回它时,终端正在等待输入。我不知道为什么以及它在等待什么。正确缩进代码是一个非常好的主意。编辑器中的自动缩进修复程序虽然在某些高级Tcl构造中存在问题,但可以让您立即发现这一点。节省大量时间。为什么不使用内置运算符将另一个数字提高到某个幂?为什么要返回循环?这与使用内置运算符无关。“是关于找到问题的答案的,兄弟。”卡洛里·霍瓦思——我两次都试过了。这两种方式都不起作用,即使我将其从循环中返回。当我试图在循环外返回它时,终端正在等待输入。我不知道为什么以及它在等待什么。正确缩进代码是一个非常好的主意。编辑器中的自动缩进修复程序虽然在某些高级Tcl构造中存在问题,但可以让您立即发现这一点。节省了很多时间。非常感谢。主要问题是增量部分。我没有使用内置操作符,因为我只是在试验proc。我刚刚开始使用tcl-tk。所以我只是个傻瓜。无论如何,非常感谢:-)非常感谢。主要问题是增量部分。我没有使用内置操作符,因为我只是在试验proc。我刚刚开始使用tcl-tk。所以我只是个傻瓜。无论如何,非常感谢:-)