请帮我看一下简单的tcl代码

时间:2015-04-26 16:18:06

标签: linux tcl

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

public File[] finder(String dirName) {
    File dir = new File(dirName);

    return dir.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String filename) {
            return filename.endsWith(".txt");
        }
    });
}

3 个答案:

答案 0 :(得分:2)

您允许循环最多进行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。要使上述功能也适用于0,您可以使用Peter's proc

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

set ans [expr {$base**$pow}]

甚至:

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

答案 1 :(得分:2)

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

proc raise {base pow} {
    for {set answer 1} {$pow > 0} {incr pow -1} {
        set answer [expr {$answer * $base}]
    }
    return $answer
}

在使用代码进行实验时,通常会对变量和命令调用感到吝啬:当您确定无法消除它们时,您可能拥有相当高效,可读且健壮的代码。 / p>

文档:exprforincrprocreturnset

答案 2 :(得分:1)

只是一目了然的答案:你过早地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
}