JTcl 2.1.0
Version of implementation JTcl of programming language TclA version of JTcl, released on December 19, 2011.
Changes since JTcl 2.0.0:
- Added JTcllib — JTcl-specific library of modules using the Java package. The first (and so far, the only) module is hyde.
-
info command ::foo
returned too many leading namespace separators. - An exception was thrown when opening a non-existent file in mode “a” or “a+”.
- Fileevent processing on an open socket would cause excessive CPU usage.
Links:
Examples:
Hello, World! - Tcl (215):
puts "Hello, World!"
Factorial - Tcl (273):
This example uses iterative factorial definition. In Tcl 8.4 values of factorials starting with 13! are calculated incorrectly due to overflow. In later versions and other implementations all values are correct.
set fact 1
for {set i 0} {$i <= 16} {incr i} {
puts "$i! = $fact"
set fact [expr {$fact * ($i + 1)}]
}
Quadratic equation - Tcl (274):
set A [gets stdin]
if {$A==0} {
puts "Not a quadratic equation.";
return
}
set B [gets stdin]
set C [gets stdin]
set D [expr {$B*$B-4*$A*$C}]
set r [expr {-0.5*$B/$A}]
set i [expr {0.5*sqrt(abs($D))/$A}]
if {$D==0} {
puts "x = $r"
} elseif {$D>0} {
puts "x1 = [expr {$r+$i}]"
puts "x2 = [expr {$r-$i}]"
} else {
puts "x1 = ($r, $i)"
puts "x2 = ($r, [expr {-$i}])"
}
CamelCase - Tcl (315):
This example shows character-wise string processing. A regular expression is used to check whether current character is a letter.
set S [gets stdin]
set S [string tolower $S]
set L [string length $S]
set lastSpace 1
set cc ""
for {set i 0} {$i < $L} {incr i} {
set letter [string index $S $i]
if { [string match {[a-z]} $letter] } {
if { $lastSpace == 1 } { set letter [string toupper $letter] }
append cc $letter
set lastSpace 0
} else {
set lastSpace 1
}
}
puts $cc
Fibonacci numbers - Tcl (386):
This example uses iterative definition of Fibonacci numbers.
set fib1 0
set fib2 1
set s ""
for {set i 0} {$i < 16} {incr i} {
set fib3 [expr {$fib1 + $fib2}]
set fib1 $fib2
set fib2 $fib3
append s "$fib1, "
}
puts "$s..."
Fibonacci numbers - Tcl (387):
This example uses tail recursion to calculate the numbers. eval
command allows to evaluate the result of calling fib
with given arguments without declaring fib
as part of any namespace.
proc fib {f1 f2 n} {
if {$n==0} {
return $f1
} else {
return [eval fib $f2 [expr {$f1 + $f2}] [expr {$n - 1}]]
}
}
set s ""
for {set i 0} {$i < 16} {incr i} {
append s [eval fib 1 1 $i] ", "
}
puts "$s..."
Comments
]]>blog comments powered by Disqus
]]>