Control
 Sequence, Condition, Loop, Return, Exception 
	- 
  		Sequence
Sequence control organizes the command flow in sequence. Each commands is executed one after another. In Snaml all the block commands for HTML and XML are sequence. Following paragraphs introduce primitive sequence commands. They are also the Tcl commands. 
              
                - 
                   set
set command assigns value to a variable. Its first argument is a variable and its second argument is an expression. You can use a variable anywhere without declare its type. A variable with dollar sign $ returns its value 
set v "a string value"
set u $v
 
                 
                - 
                   incr
The first argument of incr command is a variable name. The second optional argument is increment integer. incr command increases (decreases) variable value by increment. The default value of increment is 1. 
incr x               # x increase 1
incr x -1            # x decrease 1
incr x [expr 2*3]    # x increment
 
                 
                - 
                   expr
                  
expr command evaluates a
                  math expression with C expression syntax. It
                  concatenates all the arguments to form a input
                  string. The expression may be integer, floating
                  point, and boolean. The return value is a numeric
                  string. Many basic math functions in the standard C
                  math library have been built in. 
expr 2/3                      # return 0 (why?)
expr 2.0/3.0                  # 0.666666666667
expr asin(1.0)*round(sqrt(2)) # 1.579079632679
 
                 
                - 
                   #
                  Comment
                  
comment in the Snaml starts with
                  # in the start of a line. You'd better use
                  comment # as a command. There are some quirks
                  prohibited you from writing comment anywhere. (i.e.
                  no inside the switch command.  
set x 6; # comment here. ; new command
# comment start
 
                 
                - 
                  
                  quote
                  
quote command outputs its
                  argument string to a IO channel. The IO channel is
                  defined by __output command. It maybe a file or
                  stdout. It is a special start command with only one
                  argument and no tags. 
                   
quote "output a $string and a [compute $value]"
 
                 
               
             
            - 
              
              Condition
              
 
              Condition control may select a command to execute
              according to the variable value. It branches the command
              flow. 
              
                - 
                   if
                  
if command will execute
                  truebody when the expression is true, otherwise it
                  will execute elsebody. Its body is a group of
                  commands. The else and elseif keyword are optional
                  for if command. Following codes are several forms of
                  if command 
if {expression} {truebody}
if {expression} {truebody} else {elsebody}
if {expression1} {
  truebody1
} elseif {expression2} {
  truebody2
} else {
  elsebody
}
                 
                - 
                  
                  switch
                  
The syntax of switch
                  command is:  
switch option value pattern body ... 
switch option value {pattern body ...}
                  switch command compares a value
                  with patterns. If one of them is matched then program
                  executes the related body. The first argument of the
                  switch command is an option. The 
                  '-exact' attribute will match the value
                  to the pattern exactly; '-glob'
                  attribute will use glob pattern matching; and 
                  '-regexp' will match with regular
                  expression pattern. '--' represents
                  the end of the option. The last pattern 
                  'default' will execute its body if no
                  patterns are matched before. 
                  In the following example, since
                  pattern and body pairs are grouped into an argument,
                  there is no substitution inside the pattern/body
                  pairs. 
switch -exact -- $val {
  first {doFirst}
  second {doSecond}
  third {doThird}
  default {doDefault}
}
                  following example can substitute
                  its patterns  
switch -glob -- $val  $v1 do_v1  $v2 do_v2  $v3 do_v3
 
                 
               
              
             
            - 
               Loop
              
              Loop commands execute a group of commands in
              iteration. The iteration may terminate after all the
              elements are traversed or a condition expression becomes
              true. 
              
                - 
                  
                  foreach
                  
 
                   
                  foreach command repeatly
                  executes its body until all the elements in a list
                  have been traversed. Its form is,  
foreach var alist ... body
 
                  The var is the current loop
                  variable that is assigned an element from the alist
                  one after another. foreach will traverse all
                  the elements in the alist. This command is a compact
                  expression of iteration. 
                   
foreach v {a b c d e} {
  quote $v
}
                  You can declare two or more loop
                  variables. The variables will orderly sample the
                  elements in the list until all of them are traversed.
                  Following example shows that varaiable (v1 v2) pair
                  is assigned the value (a b) respectively, and then
                  the value (c d), and so on. 
                   
foreach {v1 v2} {a b c d e f} {
  quote "($v1 $v2)"
}
                  To loop over multiple lists, you
                  may organize arguments in var/list pair order. The
                  variable var may also be multiple variables. A loop
                  variable will be set to empty {} when its list has
                  finished traverse but the entire loop did not
                  terminated.  
foreach v {a b c d} {v1 v2} {1 2 3 4 5 6} {
  quote "($v) ($v1 $v2)"
}
                 
                - 
                  
                  while
                  
while command evaluates
                  the expression, if it is true then executes
                  the body, and then evaluates the 
                  expression again until the expression is
                  not true. Its syntax is like while statement of C
                  language.  
while expression body
 
                  An example of while command
                  is,  
set count 7 
while {$count > 0} { 
  quote "2*$count" 
  incr count -1 
}
                 
                - 
                   for
                  
The for command syntax
                  is,  
for initial expression increment body
 
                  At first it evaluates the 
                  initail argument and then evaluates the 
                  expression. If the expression is true it
                  executes the body and increment.
                  Repeatlly, it evaluates the expression again
                  and continues the loop until expression
                  returns a false value. 
                   
set len 7
for {set count 0} {$count < $len} {incr count 1} {
  quote "2*$count"
}
                 
               
             
            - 
               Return
              
return command comes back
              from a procedure with a value; break command exits
              from a loop; and continue command will goto the
              start of a loop to execute the next iteration.
               
set b 6
set c 5
set len 7
for {set count 0} {$count < $len} {incr count 1} {
  if {$count == $b} {
    break
  } elseif {$count == $c} {
    continue
  } 
}
return $c
               
             
            - 
              
              Exception
              
 
              Exceptions raise abnormal conditions during the execution
              of commands. 
              
                - 
                  
                  Catch
                  
catch command caught the
                  exceptions of a command during its execution. Its
                  syntax is,  
catch {command args ... } result
                  catch command sets trap to the
                  command in the curly braces. When there is an
                  exception during the command execution, the exception
                  message is assigned to the variable 'result',
                  otherwise the 'result' gets the return value
                  of the command. catch command returns zero when no
                  exception is raised, otherwise returns
                  non-zero.  
if [catch {test $exception} result] {
  quote "Exception: $result"
} else {
  quote "OK: $result"
}
                 
                - 
                  
                  Error
                  
error command generates
                  an error code. Its first argument is a string that
                  indicates the reason of an error  
catch {...} errmsg
error $errmsg
                 
               
             
           
         | 
      
     
 
 
Copyright© 2003-2013, Neatware. All Rights Reserved. 
 | 
 |