zoukankan      html  css  js  c++  java
  • tcl/tk之流程控制命令

    作为学习笔记,写下来仅供自己查阅。

    tcl脚本命令风格有些类似linux命令,比较古老和原始的语言,学过linux的看起来应该毫无压力

    if 命令

    if {$x < 0} {

        set x 0

    }

     

    if {$x < 0} {

        ...

    } elseif {$x == 0} {

        ...

    } elseif {$x == 1} {

        ...

    } else {

        ...

    }

    每一个左大括号都必须在它的前一个单词的同一行,因为换行符就是命令分隔符。下面这段脚本就会被解析为两个命令,报告if命令因参数不足而报错:

    if {$x < 0}

    {

        ...

    }

     

    switch 命令:

    switch $x {

        a {incr t1}

        b {incr t2}

        c {incr t3}

        default {incr t4}

    }

     

    while 命令:

    倒转列表元素书序程序如下:

    set b {}

    set i {expr {[llength $a] - 1}}

    while {$i > 0} {

        lappend b {lindex $a $i}

        incr i -1

    }

     for循环 实现如下:

    set b {}

    for {set i {expr {[llength $a] - 1}}} {$i >= 0} {incr i -1} {

        lappend b [lindex $a $i]

    }

     

     foreach命令 实现:

    set b {}

    foreach i $a {

        set b [linsert $b 0 $i]

    }

    foreach 命令也接受变量名列表:

    foreach {x y} {a b c d e} {

        puts "<$x>,<$y>"

    }

    =><a><b>

      <c><d>

      <e><>

     

    foreach 还可以并行处理多个列表:

    foreach i  {a b} {j k} {v w x y z} {

        puts "i:<$i>,j:<$j>,k:<$k>"

    =>i:<a>,j:<v>,k:<w>

      i:<b>,j:<x>,k:<y>

      i:<>,j:<z>,k:<>

     

    循环控制: break 与 continue

    这两个命令与c语言中对应的语句相同,都不需要任何参数。

     

    eval 命令:

    用于创建和运行tcl脚本的通用构造块。它接受任一多个参数,把它们用分隔符串接起来,然后把串接的结果作为一个tcl脚本处理。

    set reset {

        set a 0

        set b 0

        set c 0

    }

    ...

    eval $reset

    又如:

    set vars {a b c d}

    eval unset $vars

    串接 unset $vars 参数后结果为

    unset {a b c d}

    然后把以上语句作为一个tcl脚本执行,结果清除a b c d四个变量。

     

    source 命令:

    读取一个文件,将其内容作为tcl脚本运行。

    一个参数,该参数指定要读取的文件名。例如:

    source init.tcl

    改命令运行init.tcl文件的内容。可以用绝对路径或相对路径。

    source 的返回值就是文件内容的返回值,即文件中最后一个命令的返回值。

    另外source允许在文件内的脚本中使用return命令终止过程。

    使用source命令,可以将一个大的脚本分为小的模块,又一个主脚本用source调用其他的脚本模块。

    可以通过把过程定义放到一个文件中,把可重用的过程建立成库。

  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/kane1990/p/2293978.html
Copyright © 2011-2022 走看看