if 0 { <> ---- **Introduction** [MiHa] 2015-06-13: HelloWorld-programs are supposed to be the most simple, working programs of a given language. But I want to extend such a HelloWorld-program to a one-page - reference-card, <
> where all the essential features of the language are shown. <
> Several short programs would be ok, too. <
> If possible, while doing something useful (and/or funny). Tcl by itself (without Tk) is http://wiki.tcl.tk/10259%|%quite simple%|%, so an amount of code to fill about one printed page should be enough. <
> (The layout may need to be tweaked, e.g. printing front and back, landscape, and in 2-4 columns:) Basic [Tcl Commands] to cover: * http://wiki.tcl.tk/1669%|%Comments%|% / statements * Output: [puts] / -nonewline ** [format] * Numeric [variable]s: [set] * multiple statements / assignments in one line ** simple calculations: [incr] / [expr] * [proc] / [return] - for functions * basic flowcontrol: ** [if] / then / else / elseif / comparing ** [for] - loop, maybe also the [while]-loop / [break] / [continue] * [foreach] * String variables / quoting * [exit] Advanced features (to include if space permits): * input: [gets], [eof], [scan] / checking the input <
>This is an important topic, but likely too much for one page. * [catch] * [global] / $::var * [string]-operations (e.g. find/extract/replace char in a string, append, delete/split ...) * [data structure]s: ** [array] / [parray] ** [list] / [lassign], [lappend], [lset], [linsert], [lreplace] / [lindex], [llength] / [lrange], [lsearch], [lsort] ** [dict] * [file]-operations / [open], [close ] / [glob] ... More features, to be left out, for a later lesson (too advanced, or too rarely needed for an introduction): * [upvar] / [uplevel] * [namespace]s * [eval] * [interp] * [lambda] * [regexp] - this is very likely too complex to cover as just one small example on a general introduction page. * [switch] * [unknown] ... Things to be aware of: * comments are commands, so quotes and braces inside need to be balanced * when to use / not to use "$" with variablenames ( set i 1; puts $i; incr i $i ) Maybe there already are some programs here in the wiki that would qualify for such a refcard-program... } ---- **Program 1** ======tcl # HelloWorld001.tcl - 2015-06-13 - http://wiki.tcl.tk/41268 # Output a string to terminal: puts "Hello, World!" ### END ### ====== ---- **Program 2** ======tcl # HelloWorld002 - 2015-06-23 # http://ideone.com/9KlN4c # Assign value to variables, and output: set a "The answer is" set n 42 puts $a puts $n incr n ;# add 1 to a numeric variable puts "$a now $n" # END # ====== ***Output 2*** ======none The answer is 42 The answer is now 43 ====== ---- **Program 3** ======tcl # HelloWorld003.tcl - MiHa - 2015-06-13 # http://wiki.tcl.tk/41268 / http://ideone.com/xl0IBI # Query the time (cs as a number, td and hh as a string), # output depending on the value of the hour: set cs [clock seconds] ;# seconds since 1970-01-01 set td [clock format $cs -format "%Y-%m-%d %H:%M:%S" ] ;# timedate set hh [clock format $cs -format %H ] ;# hours (00-23) puts "cs=$cs td='$td' hh=$hh" if { $hh < "12" } { puts -nonewline "Good morning, " } else { puts -nonewline "Hello, " } puts "World!" # END # ====== ***Output 3*** ======none cs=1434926575 td='2015-06-21 22:42:55' hh=22 Hello, World! ====== ---- **Program 4** ======tcl # HelloWorld004.tcl - MiHa - 2015-06-21 # http://wiki.tcl.tk/41268 / http://ideone.com/Llp8Os # Query the hour from the clock, # output text depending on the value of the hour: set cs [clock seconds] ;# seconds since 1970-01-01 set hh [clock format $cs -format %H ] ;# hours (00-23) puts "cs=$cs hh=$hh" if { $hh < "12" } { puts -nonewline "Good morning, " } elseif { $hh > "18" } { puts -nonewline "Good evening, " } else { puts -nonewline "Hello, " } puts "World!" # END # ====== ***Output 4*** ======none cs=973531773 hh=17 Hello, World! ====== and ======none cs=1434927642 hh=23 Good evening, World! ====== ---- **Program 5** ======tcl # HelloWorld005 - 2015-06-23 # http://ideone.com/OJoort # Comparing strings: set hh "20" set tx "Hello" if { $hh < "12" } { set tx "Good Morning" } if { $hh > "18" } { set tx "Good Evening" } puts "It is $hh:00 --> $tx, World !" #. ====== ***Output 5*** ======none It is 20:00 --> Good Evening, World ! ====== ---- **Program 6** ======tcl # HelloWorld006 - 2015-06-23 # http://ideone.com/GBiMab # Comparing strings, proc as function proc greeting {hh} { set gr "Hello" if { $hh < "12" } { set gr "Good Morning" } if { $hh == "12" } { set gr "Happy Lunchtime" } if { $hh > "18" } { set gr "Good Evening" } return $gr } set hh "12" set tx [greeting $hh] puts "It is $hh:00 --> $tx, World !" #. ====== ***Output 6*** ======none It is 12:00 --> Happy Lunchtime, World ! ====== ---- **Program 7** ======tcl # HelloWorld007.tcl - 2015-06-xx #. ====== ***Output 7*** ======none xx ====== ---- Some ideas: * Table of primes * Dice-rolling ** with min/max/average * Calculate distance * Number of days between dates ... ---- **Program x** ======tcl # HelloWorld00x.tcl - 2015-06-xx #. ====== ***Output x*** ======none xx ====== ---- ---- **Remarks** This is the Alpha-version, there ''will'' be bugs, so use with caution <
> ... ---- '''See also:''' * http://wiki.tcl.tk/41210%|%ClockDemo%|% * ... <> Example | Tutorial