显示标签为“TCL”的博文。显示所有博文
显示标签为“TCL”的博文。显示所有博文

星期二, 十月 28, 2008

tcl中expr用来计算常用函数值

我们知道,在tcl中expr可以用来计算加减乘除等运算,如:

set c [expr $a/$b];

除了标准操作符+、-、*、/之外,还可以为expr提供几个能够使它执行其他数学操作的选项。expr命令的基本语法是:

expr function number

expr能够识别的一些函数及其返回的值如下:

abs(x) x的绝对值

round(x) x舍入后所得到的整数值

cos(x) x的余弦(x为弧度)

cosh(x) x的双曲余弦

acos(x) x的反余弦(0到p)

sin(x) x的正弦(x为弧度)

sinh(x) x的双曲正弦(-p/2到p/2)

asin(x) x的反正弦(-p/2到p/2)

tan(x) x的正切(x为弧度)

tanh(x) x的双曲正切

atan(x) x的反正切(-p/2到p/2)

exp(x) e的x次幕

log(x) x的自然对数

log10(x) x的底为10的对数

sqrt(x) x的平方根


下列数学函数采用两个数字变元:

pow(x,y) x的y次幂

这个函数的用法如下:

set a 2;

set b [expr pow($a,3)];

puts $b;

这些命令产生的输出结果为8.0,即2的3次幕的值。

星期五, 八月 24, 2007

upvar: point in tcl

When we need pass a variable name to a procedure, we can use upvar. upvar like reference in C++, we can changes the variable as we like.

the syntax of upvar is:
upvar ?level? varName localvar 
example:

#!/usr/bin/tcl
proc swap { x y} {
    upvar x a
    upvar y b
    set tmp  $a
    set a    $b
    set b    $tmp
}

set x 10
set y 5
swap x y
puts "x is $x"
puts "y is $y"  

result:
x is 5
y is 10

星期四, 八月 23, 2007

tcl 中array做为函数参数传递的调用方法

现在一般教本语言(perl python tcl)中都会提供字典(数组)这样的数据结构,
这种结构使用起来最为灵活方便,但是也最不容易掌握。

在TCL中可以将数组名作为函数参数,再通过upvar,得到数组的内容。
下面的例子就显示了这个用法:

#!/usr/bin/tclsh

proc foo {arr_foo} {
    upvar $arr_foo arr
    puts -nonewline {$arr(key1):}
    puts $arr(key1)
    puts -nonewline {$arr(key2):}
    puts $arr(key2)
}

set a(key1) value1
set a(key2) value2
foo a       
  
结果:
$arr(key1):value1
$arr(key2):value2