感受 Tcl

news/2024/10/30 9:31:44/

感受 Tcl  ...
===================================================================================
Tcl  foreach

http://www.blueantstudio.net/scriptnet/ssdn/tcl/tcltrain/tcl_ctrl_circle.htm

Tcl 的 foreach 真的很强大, 上面链接里的两种语法形式都很有用,

拿 Tcl 跟 Prolog 比, 在 Prolog 里, 你想把一个list 的所有元素,

从尾到头的重新组成新的list, 虽然也是几行代码,可是在Prolog 里,需要很强的逻辑性,

而在Tcl 中, 你只要掌握了 foreach 的语法就很容易理解,只要很少的代码

---------------------------------------------------------------------------------------
set a  [list 1 2 3 4 5 6 7]
set b ""
foreach i $a {set b [linsert $b 0 $i]}
puts $b
输出:
7 6 5 4 3 2 1
------------------------------------------------------------------------------------

而且要在Prolog 里把两个list 的元素 按一定的顺序混合成一个新的元素,

除了递归还是递归,思路要是一步不清楚了,就会栈溢出,

而在Tcl 中,竟然这么简单

----------------------------------------------------
set x {}
foreach i {a b c} {j k} {d e f g} {
lappend x $i $j $k
}

这时总共有三次循环,x的值为"a d e b f g c {} {}"
但是这么用foreach 稍微有一点不容易理解

这里的 i 是指得 list {a b c} 里的每一项
j k 指得是 {d e f g} 里的每两项

这三行代码就是说, 拿 {a b c}  里的每一项 加上{d e f g}  里的每两项



-----------------------------------------------------

要在 java 里实现这个 真的很不容易

----------------------------------------------------------------------------------------------
Tcl 里的另一个 很强大的 foreach 例子

set a "abc def           ghi 

xyz"

foreach i $a {

puts "$i"

}

输出是:
-------------------------------------------
abc
def
ghi
xyz
-------------------------------------------


==================================================================
tcl  switch

下面是个简单的tcl 的 switch 应用
--------------------------------------------------------------------------------------
set x "002"

switch $x {
"001"        {puts "Montag" }
"002"        {puts "Dienstag" }
"003"        {puts "Mittwoch" }
"004"        {puts "Donnerstag" }
"005"        {puts "Freitag" }
"006"        {puts "Samstag" }
"007"        {puts "Sonntag" }
"default"    {puts "$x is NOT A MATCH"}
}

输出: Dienstag
----------------------------------------------------------------------------------------------

这种情况在c,c++,java 里想都不要想,在java 里只能这么实现, c, c++ 里语法都跟这个差不多
都是只能用整数和字符,
----------------------------------------------------------------------------------------------

public class SwitchTest {

    public static void main(String args[]) {
        int zahl;
        zahl = -2;

        switch (zahl) {
        case 1:
            System.out.println("Montag");
            break;
        case -2:
            System.out.println("Dienstag");
            break;
        case 3:
            System.out.println("Mittwoch");
            break;
        case 4:
            System.out.println("Donnerstag");
            break;
        case 5:
            System.out.println("Freitag");
            break;
        case 6:
            System.out.println("Samstag");
            break;
        case 7:
            System.out.println("Sonntag");
            break;
        default:
            System.out.println("Eingabe ist falsch.");
        }
        System.exit(0);
    }
}

输出: Dienstag
----------------------------------------------------------------------------------------------


真的是每个语言都有它的适用性和优缺点,
想当初写稍微复杂点的单个程序里用switch 语句少写一个break 结果还找了半天找不到错在那里,
如果不用switch 就只能用 if else if else

==================================================================


tcl  函数
==================================================================
tcl 里有一个很灵活的用法,就是可以跟返回一个整数一样返回一个含有任何基本数据类型的字符串的数组,
而且有两种返回的方法,
一是返回一个 list
二是返回一个以任何字符串为key 任何字符串为value 的一个array.






==================================================================

最不习惯的几点

一 变量前加美元符号,不过想想如果变量前加欧元符号那会更不习惯,

二 每个元素之间都要有空格, 比如写成 while{$x<5} 就出错,必须写成 while _{$x<5} 
    _这里代表空格

三 参数之间不用逗号分开, 用空格分开

四 elseif  不分开

五 我错了无数次的到现在还没改掉的 几个例子

    if () { }   错 ===========> 参数应该在大括号里   if  { } { }

   
if  { } {
     }else {  }
  错,  else 跟 前面的大括号中间没有加空格,

      if  { }  {  }
     else {  }
  错, if  语句的结尾的大括号要跟 else 在同一行上,


         ============> 应该是 

    if  { } {
     }  else {  }
 


         还有呢,
      
        set a 10

           if  { a > 0} {
             puts "a>0"
         }  else {
             puts "a<0"
         }
 

   
         还错, 为什么呢,  if 的条件应该这么写   $a >0




缺点
-----------------------------------------------
没有类型,   这个是缺点也是优点,缺点是不支持复杂的数据类型, 优点呢太多了


举个缺点的例子吧

不过就像蜘蛛侠里说的,能力越大责任也越大, 在 Tcl 里也是, 如果不注意随心而写,

很可能写出来的程序很难维护,甚至是自己写的代码,

如果你这写这么一个函数

proc , countryName {

    set systemTime [clock seconds]
       puts "the time of $countryName now is :[clock format $systemTime -format {%Y-%m-%d %H:%M:%S}]"
}


在调用时写这么一行
----------------------------------------------
, china
----------------------------------------------
然后输出是:
---------------------------------------------
the time of china now is :2007-01-15 23:11:16
--------------------------------------------

如果你看到 下面一堆, 你会不会马上头就大了呢,这是写作文呢,还是学英语呢,
---------------------------------------------
, america
, china
--------------------------------------------
怎么看都不像代码,所以说,如果你的tcl 代码大概有一两百行的话,慢慢分析还能看懂,

如果到一两千行,分析起来就很麻烦了,

可是越是用tcl  熟练的人, 越是会起这种古怪的名字,这个是tcl 的一个缺点,

但绝对也是个能让人去炫耀的东西, 怎么样,你不是会 tcl 吗,但我的程序你就是看不懂。


==================================================================
很好的一个练习工具是 TclTutor

http://www.msen.com/~clif/TclTutor.html

下面是几个讲解 tcl 的网站
http://www.tclchina.com/column/tools.htm

http://www.blueantstudio.net/scriptnet/ssdn/tcl/tcl_train.htm

不过最好的还是, man page,
http://tmml.sourceforge.net/search.php

Tcl/Tk 安装,
windows 下直接安装就可以了
http://www.activestate.com/store/download.aspx?prdGUID=f0cd6399-fefb-466e-ba17-220dcd6f4078


Tcl/tk download
http://www.activestate.com/store/download.aspx?prdGUID=f0cd6399-fefb-466e-ba17-220dcd6f4078=tcl8414-src.zip&5874443


Visual Tcl
http://vtcl.sourceforge.net/?x=screen

download
http://sourceforge.net/project/showfiles.php?group_id=285&package_id=304&release_id=178864

Windows XP and NT
    * Download and install Visual Tcl from the projet download page, you should grab the newest release.
    * My file was named: tcl-1.6.0.tar.gz
    * Unpack the file. In my case, I used WinZip to extract to: c:/
    * Rename c:/vtcl-1.6.0 to c:/vtcl
    * Go into your vtcl directory and double-click on "vtcl.tcl" icon.


TclPro
http://www.tcl.tk/software/tclpro/
download
http://www.tcl.tk/software/tclpro/eval/1.4.html


http://www.ppmy.cn/news/149527.html

相关文章

TCL基本语法

目录 1.输出 2.赋值 3.替换 微信公众号 1.输出 tcl使用”puts”关键字来作为输出语句 puts hello 结果> hello ​puts –nonewline "hello hello"结果>hello hello 2.赋值 tcl 使用“set”关键字来定义参数&#xff0c;不必指定变量值的类型&#xff0…

Tcl是什么?

安装Vivado之后&#xff0c;在GUI界面会看到Tcl Console&#xff0c;在这里可以输入Tcl命令。同时&#xff0c;还会发现有一个所谓的“Vivado 2018.2 Tcl Shell”&#xff08;如果你安装的是Vivado 2018.2的话&#xff09;&#xff0c;意味着可以在Tcl模式下使用Vivado。通常&a…

tcl脚本(一) - 基本语法

文章目录 介绍置换普通置换变量置换命令置换反斜杠 \ 置换花括号{ }和双引号“”双引号""花括号{ } 变量数组集合 控制流if 命令while命令for循环命令foreach循环命令switch命令其他命令 过程proc 命令局部变量和全局变量 字符串操作format命令scan命令regexp命令 文…

TCL编程语言教程

TCL编程语言教程 TCL&#xff08;Tool Command Language&#xff09;是一种解释型编程语言&#xff0c;它的主要设计目标是提供一个简单易用的脚本语言&#xff0c;而且可以方便地嵌入到其他程序中。TCL最初由约翰奥斯汀&#xff08;John Ousterhout&#xff09;在1988年开发。…

TCL基础知识

TCL基础知识 置换 TCL解释器运用规则把命令分成一个个独立的单词&#xff0c;同时进行必要的置换 TCL置换分为以下三类 变量置换 $ 命令置换 [] 反斜杠置换 \ 用 $ 表示变量置换 TCL解释器会将认为 $后面为变量名&#xff0c;将变量置换成它的值 用[]表示命令置换 []内是一…

TCL使用

tcl常用的语法 1.## tcl脚本命令 tcl有效的命令是以命令字符串的形式。例如 set a 4&#xff1b; 2。置换命令 tcl中&#xff0c;有三种置换&#xff1a;变量置换&#xff0c;命令置换和反斜杠置换。 ##2.1变量置换 以$为标记&#xff0c;例如%set $xy;就是讲x的值与y相加。 #…

初识Tcl(五):Tcl 循环

目录 Tcl循环 循环控制语句 无限循环 Tcl while循环 语法 流程图 示例 Tcl for循环 语法 流程图 示例 Tcl嵌套循环 语法 示例 Tcl break语句 语法 流程图 示例 Tcl continue语句 语法 流程图 示例 Tcl循环 可能有一种情况&#xff0c;当需要执行一个代码…

十二、TCL脚本

文章目录 引言学习核心基础语法置换(substitution)变量置换命令置换反斜杠置换双引号和花括号 变量简单变量数组其它相关命令unsetappendincr表达式 list 控制流ifwhileforforeachswitch命令break/continuesourceeval 过程proc 命令局部变量和全局变量 字符串操作formantscanre…