Skip to content

Tcl言語の基本構文

空白文字で区切った単語(word)のリスト。最初の単語はプロシージャ名として扱う。セミコロンまたは改行でコマンドの終わりを示す。

puts hello world

set 命令で変数を作成する。変数は $var のように参照し、unset で破棄する。

set user glenda
puts $user
unset user

大かっこを使うとコマンドを実行した結果をその場に展開する。

set x [expr 1+2]

コマンド置き換えはネストしてもいい。ところで、コマンドと言っているがTCLにおける命令を意味するのでシェルやPerlのバッククオートとは意味が異なる。

空白文字を文字列の一部として利用する場合は二重引用符でクオートするか、波括弧で囲む。

set user glenda
puts "hello, $user" # hello, glenda
puts {hello, $user} # hello, $user

上記どちらも2単語のコマンドとなるが、二重引用符の場合はバッククオートによるエスケープ処理と文字列補間(interpolation)が有効なので変数やコマンドの展開が行われる。波括弧の場合はそのままの文字列リテラルとして扱われる。

波括弧はネストしてもいいらしいが、ネストしたい状況はあるんだろうか。

組み込みの演算子を持たないので expr 命令を使う。

puts [expr {1 + 3}]

ところで、数式は expr 1 + 3 と書いてもいいのだが、この場合はトークン分割と結合が裏で行われるため文字列リテラルを使う方が速いらしいが、現代では誤差じゃなかろうか。

コメントは # で開始する。

# 1行コメント
set var 1 # 行末までコメント

proc 命令で定義する。リターンがあればそれを、なければ最後に実行した結果を返す。仮引数は空にしてもよい。

proc get_max {a b} {
if {$a > $b} {
return $a
} else {
return $b
}
}

引数にデフォルト値を持たせたい場合は次のようにする。

proc get_max {a {b 0}} { ... }

また args という名前は特別で、可変長引数となる。