如何使用内置的tcl电源功能?

时间:2015-07-13 10:01:21

标签: math tcl

我正在使用这个tcl版本 /tools/tcl/8.4.11/linux64/bin/tcl

我可以知道如何在我的tcl脚本中使用内置的power函数吗?

我尝试了这个,但它不起作用。

namespace import ::tcl::mathfunc::*
puts [pow 10 2]
unknown namespace in import pattern "::tcl::mathfunc::*"
    while executing
"namespace import ::tcl::mathfunc::\*"

我可以知道为什么吗?

2 个答案:

答案 0 :(得分:1)

{1}}命名空间在Tcl 8.5中添加,在Tcl 8.4中不受支持。在Tcl 8.5+中,您可以使用

::tcl::mathfunc

以及在namespace import ::tcl::mathfunc::* pow 10 2 # -> 100.0 内调用pow,但在Tcl 8.4及更早版本中,您必须使用

expr

expr {pow(10, 2)} # -> 100.0 命令(如果存在)可以调用为常规Tcl命令在传递给mathfunc的表达式脚本中作为伪函数调用。在后一种情况下,使用带有parantheses和逗号的C风格语法。拥有它们的关键主要在于它可以更容易地使用新的数学函数扩展expr。作为副作用,对于最简单的计算,可以完全避免调用expr

expr函数返回一个浮点值,就像在C中一样。正如Donal Fellows在他的答案(qv)中描述的那样,可以使用pow运算符指定整数取幂值(这是还有一个单独的命令:**)。此运算符仅为Tcl 8.5+。

文档:exprmathfuncmathop

答案 1 :(得分:1)

该功能是在Tcl 8.5中引入的。在8.4及之前,函数是使用一个没人真正理解的特殊API实现的(传递指向Tcl_Value结构的指针,这很奇怪)。

pow()函数是所有Tcl版本中的浮点函数(即使写为::tcl::mathfunc::pow的调用)。整数取幂只能通过**运算符( 需要Tcl 8.5 ,这也是支持任意大小整数的第一个版本):

puts [expr { 10 ** 2 }]
# Note the namespace
puts [tcl::mathop::** 10 2]
namespace import tcl::mathop::*
puts [** 10 2]

**运算符与pow()完全等效,如果它的任何一个参数是一个浮点数(并且确实会在后面的标准C数学库中调用相同的函数)。