JTcl
Реализация языка программирования TclJTcl — интерпретатор Tcl, написанный на Java. Первая версия JTcl увидела свет 17 ноября 2010 года. JTcl распространяется под лицензией BSD.
JTcl основан на Jacl; целью проекта является продолжение модернизации кода, начатой проектом Jacl Modernization Project, который был частью Google Summer of Code 2009.
JTcl реализует большую часть синтаксиса и возможностей Tcl 8.4 в рамках возможностей виртуальной машины Java. Выбор версии для поддержки объясняется тем, что именно эта версия фигурировала в GSOC 2009, а более поздние версии содержат множество изменений. Впрочем, команда JTcl планирует добавить поддержку ряда наиболее популярных команд Tcl 8.5.
Особенности JTcl:
-
JTcl реализует команды, опции и семантику Tcl 8.4. Исключениями являются преимущественно команды, подпадающие под ограничения Java 1.5 API, например,
file stat
. - JTcl предоставляет регулярные выражения, совместимые с Tcl 8.4, используя для этого библиотеку регулярных выражений Java и при необходимости перевод синтаксиса.
-
Команды
fileevent
иfcopy
взаимодействуют с новой системой каналов для обработки ввода-вывода, управляемой событиями. -
Команды
exec
иopen
поддерживают синтакс pipeline и перенаправлений. - Поддержка 64-битных целых.
-
Команда
trace
поддерживает трейс команд и выполнения, а также новые опции.
Логотип JTcl
Ссылки:
Примеры:
Hello, World!:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7puts "Hello, World!"
Факториал:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7Используется итеративный метод вычисления факториала. В Tcl 8.4 значения факториалов, начиная с 13!, вычисляются неправильно из-за переполнения. В более поздних версиях и других реализациях все значения правильны.
set fact 1
for {set i 0} {$i <= 16} {incr i} {
puts "$i! = $fact"
set fact [expr {$fact * ($i + 1)}]
}
Квадратное уравнение:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7set 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:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7Строка обрабатывается посимвольно. Для проверки того, что символ является буквой, используется регулярное выражение.
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
Числа Фибоначчи:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7Используется итеративное определение чисел Фибоначчи.
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..."
Числа Фибоначчи:
Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7Для вычисления чисел используется хвостовая рекурсия. Команда eval
позволяет вычислить результат вызова функции fib
с заданными аргументами без объявления fib
в определенном пространстве имен.
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..."
Комментарии
]]>blog comments powered by Disqus
]]>