Tcl/Tk+ハッシュリスト

2,061 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,061
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Tcl/Tk+ハッシュリスト

  1. 1. Tcl/Tk+ハッシュリスト id:arihh
  2. 2. 自己紹介 • ID : arihh (ありひ~) • 第1回tobe-tobeで徳川綱吉をやった人 • 普段はWeb系プログラマ • 得意言語:PHP, Java, Ruby
  3. 3. アジェンダ • ハッシュって? • TCLって? • 実演 • 開発いろいろ • まとめ • おまけ
  4. 4. ハッシュって? • キーと値の組で持つデータ構造 キーを元にハッシュ値を取得し 配列のハッシュ値の位置に値を格納する。 • 実行時間はO(1) maxでO(n)。 ただし、衝突(後述)が発生する場合は
  5. 5. ハッシュの登録 Value:りんご Value:りんご Key:apple Key:apple ハッシュ関数 ハッシュ関数 ハッシュ値:4 ハッシュ値:4 1 2 3 4 5 apple りんご
  6. 6. ハッシュの検索 Key:apple Key:apple ハッシュ関数 ハッシュ関数 ハッシュ値:4 ハッシュ値:4 1 2 3 4 5 egg milk orange apple たまご ミルク みかん りんご りんご りんご
  7. 7. ハッシュの衝突 Value:iPod Value:iPod ハッシュ関数 ハッシュ関数 Key:mac Key:mac ハッシュ値:4 ハッシュ値:4 iPod 衝突 1 2 3 衝突 4 5 egg milk orange apple たまご ミルク みかん りんご
  8. 8. オープンアドレス法 Value:iPod Value:iPod ハッシュ関数 ハッシュ関数 Key:mac Key:mac ハッシュ値:4 ハッシュ値:4 iPod 1 2 3 4 5 egg milk orange apple mac 空いているアドレスへ 空いているアドレスへ たまご ミルク みかん りんご iPod
  9. 9. 直接連鎖法(チェイン法) Value:iPod Value:iPod ハッシュ関数 ハッシュ関数 Key:mac Key:mac ハッシュ値:4 ハッシュ値:4 iPod 1 2 3 4 5 egg milk orange apple たまご ミルク みかん 配列で持たせる。 りんご 配列で持たせる。 mac iPod
  10. 10. TCLって? GUIを簡単に使えるように作られた言語 普通はTk(GUIツールキット)とセット。 歴史 – 登場は1988年 – TCL/Tkは1998年 – 最近ではTkがPerl, Ruby, Python(Tkinter) などにも利用されている。
  11. 11. TCLの特徴 すべて文字列 • リストも文字列 • 配列といわれているものはすべて連想配列 • if文の句の部分も文字列として認識される 例) if {$a > 1 } { puts $a }
  12. 12. リストも文字列? TCLのリスト {a b c d e} 他の言語なら 文字列:“a b c d e” 同じもの 同じもの 配列:array(a, b, c, d, e)
  13. 13. とりあえずTCLを試したい • tclsh と叩けばtclのシェルが動き出すよ • wishで”Hello World”もできるよ #!/usr/bin/wish #!/usr/bin/wish pack[text .t] pack[text .t] .t insert end “Hello World” .t insert end “Hello World”
  14. 14. とりあえずインタプリタ。
  15. 15. 基本はこんなところで、 やっとメインの話。
  16. 16. 開発環境 • ActiveTcl (ActiveState で落とせる) • Eclipse – DLTK(Dynamic Languages Toolkit) – dbgp_tcldebug.exe • BLT
  17. 17. 実演その2
  18. 18. まとめ • Tkとセットということなので見せ方には拘るこ とができた • GUIの配置で一苦労 • ハッシュとの相性の悪さ そもそも配列=連想配列なのでリストを使うし かなかった。 $array(1) ではなく [lindex $array 1]と書く
  19. 19. 参考 • Tcl 8.4.1 Manual Command Reference http://www.freesoftnet.co.jp/tclkits/doc/TclCmdR ef/tcl_contents_jp.htm • Tcl/TkでWindowsプログラミング http://homepage3.nifty.com/kaku- chan/tcl_tk/index.html • もっと もっとTcl/Tk http://www.interq.or.jp/japan/s-imai/tcltk/
  20. 20. ご清聴ありがとうございました。
  21. 21. おまけ
  22. 22. 粗末な実装で申し訳ないので
  23. 23. ケブンリッジ関数作ってみた。
  24. 24. ケブンリッジ • 単語の最初と最後が合っていれば、中身の 順番がめちゃくちゃでも意味が通じる。
  25. 25. こんちには みさなん おんげき ですか? わしたは げんき です。 この ぶんょしう は いりぎす の ケブンッリジ だがいく の けゅきんう の けっか にんんげ は もじ を にしんき する とき その さしいょ と さいご の もさじえ あいてっれば じばんゅん は めくちちゃゃ でも ちんゃと よめる という けゅきんう に もづいとて わざと もじの じんばゅん を いかれえて あまりす。 どでうす? ちんゃと よゃちめう でしょ? ちんゃと よためら はのんう よしろく
  26. 26. TCLだとこんなコード proc cmabrigde {str} { proc p {z x} {expr int(rand()*2)} set y {} foreach s [string map {{ } { }} $str] { if {[regexp {^(¥S)(¥S{2,})(¥S)$} $s a f c e]} { lappend y $f[join [lsort -command p [split $c {}]] {}]$e } else { lappend y $s} } puts $y }
  27. 27. ワンライナー?で動かしてみた
  28. 28. 以上で終了! 長い時間お付き合い ありがとうございました。

×