Language detail: Tcl
Coverage: 7.41%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- LL Golf Hole 6 - 10進数を2進数に基数変換する (Nested Flatten)
- LL Golf Hole 5 - 最上位の桁を数え上げる (Nested Flatten)
- echoクライアント (Nested Flatten)
- LL Golf Hole 4 - 文章から単語の索引を作る (Nested Flatten)
- LL Golf Hole 3 - 13日の金曜日を数え上げる (Nested Flatten)
codes
クリップボードへの転送
(Nested
Flatten)
Tkのclipboardコマンドで実現できます。
see: clipboard manual page - Tk Built-In Commands
1 2 3 4 5 | package require Tk
clipboard clear
clipboard append "テキスト"; # 転送
clipboard get; # 取得
#=> テキスト
|
Hello, world! PDF版
(Nested
Flatten)
Tk キャンバスの内容を PDF に出力する Trampoline! というライブラリを使用してみました。
see: Trampoline!
1 2 3 4 5 6 7 | package require trampoline
. configure -menu [menu .menu]
.menu add command -label {Save as PDF} -command {::pdf::generate .c hello.pdf}
pack [canvas .c -width 297 -height 210 -bg white]
.c create text 150 105 -text "Hello,\nWorld!" -font {Helvetica 70} -justify center
|
ウィンドウの表示
(Nested
Flatten)
wish でなく tclsh から実行するときは package require Tk を冒頭につけます。
1 2 3 4 5 6 | set w 400
set h 300
set x [expr ([winfo screenwidth .] - $w) / 2]
set y [expr ([winfo screenheight .] - $h) / 2]
wm geometry . ${w}x$h+$x+$y
wm title . こんにちは、GUI!
|
ローカル変数の一覧を取得
(Nested
Flatten)
Tcl にも info locals というずばりなコマンドがありますが Python と違って返されるのは名前のリストのみなので記述量は若干増えます。
1 2 3 4 5 6 7 8 9 10 11 12 | proc foo {} {
set x 1
set y hello
set locals [info locals]
set result {}
foreach k $locals { lappend result $k [set $k] }
return $result
}
# % foo
# x 1 y hello
|
Tiny MML
(Nested
Flatten)
Snack という Tcl/Python 向けの音声ライブラリを使用しました。Snack は ActiveTcl のディストリビューションにも含まれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package require snack
set C 262
set dur 4000
set beat 5000
set amp 30000
set score cdefedcrefgagfercrcrcrcrcdefedcr
set freq $C
foreach note {c _ d _ e f _ g _ a _ b} {
set freq [expr {$freq * pow(2, 1. / 12.)}]
set osc [snack::filter generator $freq $amp 0.0 sine $dur]
snack::sound $note
$note filter $osc
$note length $beat
}
snack::sound r; r length $beat
snack::sound snd
foreach note [split $score {}] {
snd concatenate $note
}
snd play -blocking yes
# snd write kaeru.wav -fileformat WAV
|
メソッド名一覧の表示
(Nested
Flatten)
呼び出すって実行するところまでだと気づいたので修正。引数はなしで。
1 | foreach cmd [info commands target::test_*] { $cmd }
|
1 | info commands target::test_*
|
アレイのuniq
(Nested
Flatten)
特にこれが一般的な Tcl 風スタイルというわけではありませんが tcllib の struct::list を使うと fold もできますという例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 | package require struct::list
proc lappend_uniq {l e} {
if {[lsearch $l $e] == -1} {lappend l $e}
set l
}
proc uniq {l} {
::struct::list fold $l {} lappend_uniq
}
# % uniq {3 1 4 1 5 9 2 6 5 3 5 8 9 7 9}
# 3 1 4 5 9 2 6 8 7
|






yyamasak #6712() [ Tcl ] Rating0/0=0.00
Tcl8.5の場合は、 clock millisecondsが使える。 clock microsecondsも使える。
Tcl8.4の場合は、 最近のActiveTclにバックポートとして入っているnewclock拡張を使う。
Rating0/0=0.00-0+
[ reply ]