Learning Tcl

来源:互联网 发布:罗素 作品 知乎 编辑:程序博客网 时间:2024/04/28 06:14

Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。

Tcl是tool command language的缩写,发音为 "tickle”, 实际上包含了两个部分:一个语言和一个库。

首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。 但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。


基本语法

Tcl脚本由一些被换行符或是分号分开的命令所组成。命令都有相同的基本格式,如下面的例子所示:
expr 20 +10
该命令计算20加10的和,并返回结果30。你可以把这个例子以及本文中的所有其它的例子键入到tclsh这样的Tcl应用程序中来验证它们;在一个命令结束后,tclsh将打印出它的结果。
每个Tcl命令都含有一个或多个被空格分开的单词,在这个例子中有4个单词:expr,20,+,和10。第一个单词是一个命令名,其余的单词是这个命令的参数。所有的Tcl命令都含有一些单词,但不同的命令对他们的参数有不同的处理方式。expr命令把它的所有参数看作是一个算术表达式,计算表达式的结果,并以字符串的形式返回结果。在expr命令中,单词之间的分隔不是很重要:同样的命令你可以写成这种形式:
expr20+10
不过,对大部分的命令来说,单词的结构是很重要的。每个单词都会用于不同的目的。所有的Tcl命令都返回结果。如果一个命令产生了没有意义的结果,那么它将返回一个空字符串作为它的结果。

变量

Tcl允许你在变量中保存数值,并且可以在后续的命令中使用这些数值。set命令用于对变量进行读写操作。比如,下面的命令对变量x赋值为32。
set x32
这个命令返回变量的新值。你可以让set只带一个参数来读出变量的数值
setx
你不需要在Tcl中声明变量:变量在第一次set的时候被自动创建。Tcl变量没有类型:任何值可以赋给任何变量。
要想在一个命令中使用变量的值,可以采用变量替代,如下例所示:
expr$x*3
当一个字符$出现在一个命令中的时候,Tcl把跟在它后面的字母和数字看作是一个变量名并且将其替换成变量的值。在这个例子中,expr命令接收到的实际参数将是32*3(假设变量x在前面的例子中被set过)。你可以在任何命令的任何单词中使用变量替代,甚至对一个单词多次使用
set cmd expr
set x 11
$cmd $x*$x

命令替代

你也可以在一个命令的参数中使用另一个命令的结果。这被称之为命令替代
set a 44
set b [expr $a*4]
当中括号出现在一个命令中的时候,Tcl把中括号之间的所有语句看作是一组Tcl命令。Tcl对这组命令进行解释,并用结果替代中括号之间的文字。上面的例子中,第二个set命令的第二个参数将为176。

双引号和大括号

双引号允许你指定包含空格的单词。我们看下面的这个例子:
set x24
set y 18
set z "$x + $y is [expr $x + $y]"

在这三个命令都被解释后,变量z的值将是24+18 is42。双引号之间的所有语句作为一个单词传给set命令。此处需要注意几点:
(a)引号之间的命令和变量替代仍起作用,
(b)引号自身不会被传给命令。如果没有引号的话,set命令会得到6个参数,这将引起错误。
花括号对单词提供另外一种组合信息的方式。它与双引号的不同之处在于:花括号内的替代不起作用:
set z {$x + $yis [expr $x +$y]}
这个命令把变量z赋值为 " $x + $y is [expr $x +$y]"。

控制结构

Tcl提供一整套控制结构包括条件,循环和过程。Tcl的控制结构只是一些将Tcl脚本作为参数的命令。下面的示例创建了一个叫做power的Tcl的过程,实现对一个数求它的n次方:
proc power{base p}{
    set result1
    while {$p>0}{
       set result [expr $result * $base]
       set p [expr $p- 1]
    }
    return$result
}

这个脚本由一个简单的命令proc所组成,这个proc命令有3个参数:过程名,参数名列表和过程体。过程体是一个Tcl脚本。需要注意的是,第一行末尾的花括号和最后一行花括号之间的语句都被逐字逐句的作为一个参数传给proc。proc命令创建了一个新的叫做power的具有两个参数的Tcl命令。你可以这样来调用power:
power 2 6
power 1.15 5

当power被调用的时候,过程体就被解释了。当过程体执行的时候,它可以变量的形式进入它的参数中:base获得第一个参数,p获得第二个参数。
power过程体中包含3个Tcl命令:set,while和return。while命令完成了这个过程中的大部分工作。它有两个参数,一个表达式($p>0)和一个Tcl脚本写的主体。while命令使用与C语言相似的规则来解释它的表达式参数。如果结果是真(非零),那么它将把函数体作为脚本来执行。他不断的重复这个过程,直到最后表达式的值变为假(零)。在这个例子中,while命令的函数体将result的值与base相乘,然后减少p的值。当p的值减到零的时候,结果就包含了需要的base的n次方值。return命令的作用是退出过程,同时将变量result的值作为过程的结果返回。


参考资料
1. tcl 脚本

2. TCL语言的一些学习资料

3. tcl入门经典

4. Tcl/iTcl/Tk References


原创粉丝点击