2007年8月28日火曜日

Tcl入門.ちょっといじってみた.

Tclをいじってみた.よくそのツールキットと一緒にTcl/Tk(ティクルティーケーと読むらしい.)と呼ばれるあれだ.いままで使ってみようと思うことはなかったんだけど,なんとなーくいじりはじめたらおもしろかったんで,ちょっとその言語仕様と簡単なプログラムについて書いてみた.

Tool Command Languageの略語であることからも,その基本はコマンド.なので,コマンド区切り文字までを1コマンドとして,それを順番に記述していくスタイルだ.すべての変数は文字列型というのもすごい.文字列を数字列によって表された数値としてとるかどうかというのは,コマンドにまかせられているということなんだって.また,変数代入や制御構造,プロシージャ定義などがすべてコマンドというのもすごい.(というか,やりすぎw)

というかんじで,文がコマンドしかないから,文法ってのもコマンドの書き方になるわけで,言語仕様は小さい.基本的には,変数置換,コマンド置換とかについてわかれば,文法的にはOK.1時間くらいで文法を網羅できる言語なんだが,コマンドの勉強をしなきゃならないから,1時間でマスターというわけにはいかないだろうけど・・・.

とりあえず,階乗計算プログラムを作ってみた.再帰も当然できますよってかんじでw
#!/usr/bin/tclsh
#
# factorial.tcl
#
proc factorial {n} {
if {$n == 0} {
return 1
} else {
return [expr $n * [factorial [expr $n - 1]]]
}
}

puts "n = ?"
set n [gets stdin]
puts "$n! = [factorial $n]"


実行結果はこんなかんじ.
$ tclsh factorial.tcl
n = ?
10
10! = 3628800
$


もうひとつ作った.FizzBuzzって流行ったから,FizzBuzzプログラムw
#!/usr/bin/tclsh
#
# fizzbuzz.tcl
#
for {set i 1} {$i <= 100} {incr i} {
if {![expr $i % 3] && ![expr $i % 5]} {
puts "FizzBuzz"
} elseif {![expr $i % 3]} {
puts "Fizz"
} elseif {![expr $i % 5]} {
puts "Buzz"
} else {
puts $i
}
}


実行結果は省略ね.

ふむ,Tclはなかなかおもしろいな.適当な本買ってみようかなぁ.でも,最近は出版されてないみたいだねぇ・・・.

0 件のコメント: