diff options
| author | Lari Kovanen <lari@kovanen.se> | 2015-12-09 13:25:01 +0100 | 
|---|---|---|
| committer | Lari Kovanen <lari@kovanen.se> | 2015-12-09 13:25:01 +0100 | 
| commit | 46d3c28a5fc341f3b8ef061e963adfc7c610263e (patch) | |
| tree | 794df6f192a3875dc09d2710395048c5f405a806 /tcl.html.markdown | |
| parent | dbfb19bb5779e84add18a19ebc36833e748e69d9 (diff) | |
| parent | 1f76b2ad8c35b6c7e8ac2cc5dac8f20bc74f09ef (diff) | |
Merge remote-tracking branch 'adambard/master'
Diffstat (limited to 'tcl.html.markdown')
| -rw-r--r-- | tcl.html.markdown | 50 | 
1 files changed, 25 insertions, 25 deletions
| diff --git a/tcl.html.markdown b/tcl.html.markdown index af2911c9..b90bd690 100644 --- a/tcl.html.markdown +++ b/tcl.html.markdown @@ -14,7 +14,7 @@ programming language.  It can also be used as a portable C library, even in  cases where no scripting capability is needed, as it provides data structures  such as dynamic strings, lists, and hash tables.  The C library also provides  portable functionality for loading dynamic libraries, string formatting and -code conversion, filesystem operations, network operations, and more.   +code conversion, filesystem operations, network operations, and more.  Various features of Tcl stand out:  * Convenient cross-platform networking API @@ -58,14 +58,14 @@ lighter that that of Lisp, just gets out of the way.  #! /bin/env tclsh  ################################################################################ -## 1. Guidelines  +## 1. Guidelines  ################################################################################  # Tcl is not Bash or C!  This needs to be said because standard shell quoting  # habits almost work in Tcl and it is common for people to pick up Tcl and try  # to get by with syntax they know from another language.  It works at first,  # but soon leads to frustration with more complex scripts. -  +  # Braces are just a quoting mechanism, not a code block constructor or a list  # constructor.  Tcl doesn't have either of those things.  Braces are used,  # though, to escape special characters in procedure bodies and in strings that @@ -73,7 +73,7 @@ lighter that that of Lisp, just gets out of the way.  ################################################################################ -## 2. Syntax  +## 2. Syntax  ################################################################################  # Every line is a command.  The first word is the name of the command, and @@ -83,13 +83,13 @@ lighter that that of Lisp, just gets out of the way.  # are used, they are not a string constructor, but just another escaping  # character. -set greeting1 Sal  +set greeting1 Sal  set greeting2 ut  set greeting3 ations  #semicolon also delimits commands -set greeting1 Sal; set greeting2 ut; set greeting3 ations  +set greeting1 Sal; set greeting2 ut; set greeting3 ations  # Dollar sign introduces variable substitution @@ -126,11 +126,11 @@ puts lots\nof\n\n\n\n\n\nnewlines  set somevar {      This is a literal $ sign, and this \} escaped      brace remains uninterpreted -}  +}  # In a word enclosed in double quotes, whitespace characters lose their special -# meaning  +# meaning  set name Neo  set greeting "Hello, $name" @@ -178,7 +178,7 @@ set greeting "Hello $people::person1::name"  ################################################################################ -## 3. A Few Notes  +## 3. A Few Notes  ################################################################################  # All other functionality is implemented via commands.  From this point on, @@ -193,8 +193,8 @@ set greeting "Hello $people::person1::name"  namespace delete :: -# Because of name resolution behaviour, it's safer to use the "variable" command to  -# declare or to assign a value to a namespace. If a variable called "name" already  +# Because of name resolution behaviour, it's safer to use the "variable" command to +# declare or to assign a value to a namespace. If a variable called "name" already  # exists in the global namespace, using "set" here will assign a value to the global variable  # instead of creating a new variable in the local namespace.  namespace eval people { @@ -210,7 +210,7 @@ set people::person1::name Neo  ################################################################################ -## 4. Commands  +## 4. Commands  ################################################################################  # Math can be done with the "expr" command. @@ -295,7 +295,7 @@ while {$i < 10} {  # A list is a specially-formatted string.  In the simple case, whitespace is sufficient to delimit values -set amounts 10\ 33\ 18  +set amounts 10\ 33\ 18  set amount [lindex $amounts 1] @@ -339,7 +339,7 @@ eval {set name Neo}  eval [list set greeting "Hello, $name"] -# Therefore, when using "eval", use [list] to build up a desired command  +# Therefore, when using "eval", use [list] to build up a desired command  set command {set name}  lappend command {Archibald Sorbisol}  eval $command @@ -355,8 +355,8 @@ eval $command ;# There is an error here, because there are too many arguments \  # This mistake can easily occur with the "subst" command.  set replacement {Archibald Sorbisol}  set command {set name $replacement} -set command [subst $command]  -eval $command ;# The same error as before:  to many arguments to "set" in \ +set command [subst $command] +eval $command ;# The same error as before: too many arguments to "set" in \      {set name Archibald Sorbisol} @@ -364,12 +364,12 @@ eval $command ;# The same error as before:  to many arguments to "set" in \  # command.  set replacement [list {Archibald Sorbisol}]  set command {set name $replacement} -set command [subst $command]  +set command [subst $command]  eval $command  # It is extremely common to see the "list" command being used to properly -# format values that are substituted into Tcl script templates.  There are  +# format values that are substituted into Tcl script templates.  There are  # several examples of this, below. @@ -422,12 +422,12 @@ proc while {condition script} {  # The "coroutine" command creates a separate call stack, along with a command  # to enter that call stack. The "yield" command suspends execution in that -# stack.  +# stack.  proc countdown {} {  	#send something back to the initial "coroutine" command  	yield -	set count 3  +	set count 3  	while {$count > 1} {  		yield [incr count -1]  	} @@ -435,12 +435,12 @@ proc countdown {} {  }  coroutine countdown1 countdown  coroutine countdown2 countdown -puts [countdown 1] ;# -> 2  -puts [countdown 2] ;# -> 2  -puts [countdown 1] ;# -> 1  -puts [countdown 1] ;# -> 0  +puts [countdown 1] ;# -> 2 +puts [countdown 2] ;# -> 2 +puts [countdown 1] ;# -> 1 +puts [countdown 1] ;# -> 0  puts [coundown 1] ;# -> invalid command name "countdown1" -puts [countdown 2] ;# -> 1  +puts [countdown 2] ;# -> 1  ``` | 
