我正在使用这个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::\*"
我可以知道为什么吗?
答案 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+。
答案 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数学库中调用相同的函数)。