Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
Brent B. Welch

±Û¾´ÀÌ ¼Ò°³:
Brent Welch¾¾´Â www.scriptics.comÀ¥½ÎÀÌÆ®°¡ ¸¸µé¾îÁú¶§ Tcl°ú °ü·ÃµÈ URLµéÀ» º¸±âÁÁ°Ô µ¥ÀÌÅͺ£À̽ºÈ­ÇÏ°í TclProÁ¦Ç°À» À§ÇÑ ÀüÀÚ»ó°Å·¡ ÀÎÇÁ¶óµéÀ» ¸¸µå¼Ì½À´Ï´Ù. ¶ÇÇÑ Tcl/Tk¸¦ ÀÌ¿ëÇÑ ´ëÇü ÇÁ·Î±×·¥µéÀ» ¸¹ÀÌ ¸¸µé¾ú½À´Ï´Ù. °³¹ßÇÑ ´ëÇ¥ÀûÀÎ ÇÁ·Î±×·¥À¸·Î´Â ÇöÀç www.scriptics.comÀ» ¿î¿µÇϴµ¥ »ç¿ëµÇ°í ÀÖ´Â TclHttpdÀ¥¼­¹ö, ¸ÞÀÏ »ç¿ëÀÚÀÎÅÍÆäÀ̽ºÀÎ Wxmh, webtk HTMLÆíÁý±âµîÀÌ ÀÖ½À´Ï´Ù. ±×´Â ¶Ç "Practical Programming in Tcl and Tk"¶õ Ã¥À» Æì³»±âµµ Çß¾ú½À´Ï´Ù. (Çѱ¹¾îÆǵµ ÀÖÁÒ:) Welch¾¾´Â 1982³â Boulder¿¡ ÀÖ´Â University of Colorado¿¡¼­ Ç×°ø¿ìÁÖ°øÇÐÀ» Àü°øÇÏ¿´À¸¸ç 1986³â University of California, Berkeley¿¡¼­ ÄÄÇ»ÅÍ°øÇÐ ¼®»çÇÐÀ§¸¦ ¹Þ¾ÒÀ¸¸ç 90³âµµ¿¡ ¹Ú»çÇÐÀ§¸¦ ¹Þ¾Ò½À´Ï´Ù. Welch¾¾´Â Á¦·Ï½º PARC¿¡¼­ ºÐ»ê½Ã½ºÅÛ¿¡ °üÇÑ ¿¬±¸¿øÀ¸·Î ÀÏÇÑÀûÀÌ ÀÖÀ¸¸ç ±× ÈÄ ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî ¿¬±¸¼Ò¿¡¼­ Tcl/TkÆÀ¿øÀ¸·Î È°µ¿ÇÏ°í ÀÖ½À´Ï´Ù. ÇöÀç ACM°ú IEEE ÄÄÇ»ÅͺаúÀÇ È¸¿øÀÔ´Ï´Ù. ȨÆäÀÌÁö: http://www.beedub.com/

Â÷·Ê:

The Tcl Syntax

[Ilustration]

Abstract:

ÀÌ ±Û¿¡¼­´Â Tcl¾ð¾îÀÇ ±âº»°³³ä°ú ¹®¹ý¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.



 

Tcl¹®¹ý »ìÆ캸±â

½ºÅ©¸³Æ®¾ð¾îÀÎ TclÀº ¸Å¿ì °£´ÜÇÑ ¹®¹ýÀ» °¡Áö°í ÀÖ´Ù.

¸í·É¾î ÀÎÀÚ ÀÎÀÚ ÀÎÀÚ
Tcl¸í·É¾îµéÀº ´Ü¾î·Î ÀÌ·ç¾îÁö´Âµ¥, °¢ ´Ü¾î´Â °ø¹éÀ¸·Î ±¸ºÐµÈ´Ù. ù¹ø° ´Ü¾î´Â ¸í·É¾îÀ̸§À̸ç, ³ª¸ÓÁö´Â ¸í·É¾î¿¡°Ô Àü´ÞµÇ´Â °ªµéÀÌ´Ù.
$foo
´Þ·¯Ç¥½Ã($)´Â º¯¼ö°ªÀ» ÀǹÌÇÑ´Ù. À§ÀÇ ¿¹¿¡¼­ foo´Â º¯¼ö¸íÀÌ´Ù..
[clock seconds]
´ë°ýÈ£(Square bracket)´Â ÀÏÁ¾ÀÇ ÆÄÀÌÇÁ¶ó º¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µéÀÚ¸é ¿©·¯ºÐÀÌ ¾î¶² ¸í·É¾îÀÇ ½ÇÇà°á°ú¸¦ ´Ù¸¥ ¸í·ÉÀÇ ÀÎÀÚ·Î »ç¿ëÇÒ¶§ ÀÌ ´ë°ýÈ£¸¦ »ç¿ëÇÑ´Ù. À§ÀÇ ¿¹¹®Àº °á±¹ ÇöÀç ½Ã°£ÀÇ ÃÊ´ÜÀ§¸¦ µ¹·ÁÁÖ´Â ÀÎÀÚ·Î º¼ ¼ö ÀÖ´Ù.
"some stuff"
½Öµû¿ÈÇ¥´Â ¸í·É¾î¿¡ Àü´ÞµÇ´Â ¿©·¯ ´Ü¾î·Î µÈ ÇϳªÀÇ ÀÎÀÚ¸¦ ÀǹÌÇÑ´Ù. ´Þ·¯Ç¥½Ã¿Í ´ë°ýÈ£´Â ½Öµû¿ÈÇ¥¾È¿¡¼­µµ Çؼ®ÀÌ µÈ´Ù.
{some stuff}
Áß°ýÈ£(Curly brace) ¿ª½Ã ¸î°³ÀÇ ´Ü¾îµéÀ» ÇϳªÀÇ ÀÎÀÚ·Î ³Ñ±æ¶§ »ç¿ëµÈ´Ù. ±×·¯³ª À̶§´Â °ýÈ£¾ÈÀÇ ¹®ÀåÀº Çؼ®µÇÁö ¾Ê°í ±×´ë·Î Àü´ÞµÈ´Ù.
\
¹é½½·¡½Ã(\)´Â Ư¼ö¹®ÀÚ¸¦ ³ªÅ¸³¾¶§ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î \nÀº »õ·Î¿î ¶óÀÎÀ» »ý¼ºÇ϶ó´Â ÀǹÌÀÌ´Ù. ¹é½½·¡½Ã´Â ¶ÇÇÑ ´Þ·¯Ç¥½Ã, ½Öµû¿ÈÇ¥, ´ë°ýÈ£, Áß°ýÈ£µîÀÌ °¡Áö´Â Ư¼öÇÑ Àǹ̸¦ ²ô°í ´ÜÁö ¹®Àڷθ¸ »ç¿ëÇÒ¶§ »ç¿ëµÈ´Ù.
 

ÀÛÀº ¿¹Á¦

ÀÌ·¡¿¹´Â ÇöÀç½Ã°£À» È­¸é¿¡ Ãâ·ÂÇÏ´Â °£´ÜÇÑ Tcl¸í·ÉÀÌ´Ù. »ç¿ëµÇ´Â Tcl¸í·É¾î´Â set, clock, putsµî ¼¼°³ÀÌ´Ù. set¸í·ÉÀº º¯¼ö¸¦ ÁöÁ¤ÇÑ´Ù. clock¸í·ÉÀº ÇöÀç ½Ã°£°ªÀ» °è»êÇÑ´Ù. puts¸í·É¾î´Â °ªÀ» Ãâ·ÂÇÑ´Ù.

set seconds [clock seconds] puts "The time is [clock format $seconds]"

º¯¼ö¸¦ ÁöÁ¤ÇÒ¶§´Â $±âÈ£¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ±â¾ïÇØ µÎ±â ¹Ù¶õ´Ù. ´ÜÁö ¿©·¯ºÐÀÌ ¾î¶² º¯¼öÀÇ °ªÀ» »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖÀ»¶§ $¸¦ ºÙ¿© »ç¿ëÇÑ´Ù. secondsº¯¼ö´Â »ç½Ç ²À ÇÊ¿äÇÑ º¯¼ö´Â ¾Æ´Ï´Ù. ¿©·¯ºÐÀº ÇöÀç ½Ã°£À» ´ÙÀ½ ¸í·ÉÇÑÁٷεµ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.:

puts "The time is [clock format [clock seconds]]"

 

±×·ìÈ­(Grouping)¿Í ´ëü(substitution)

TclÆļ­´Â ´Ù¸¥ ¼¼´Ü°è¸¦ °ÅÃÄ Tcl¹®¹ýÀ» Çؼ®ÇÑ´Ù.: ÀÎÀÚ ±×·ìÈ­, °á°ú ´ëü,¸í·ÉÀÇ ½ÇÇà.

  1. ÀÎÀÚ ±×¸¨È­. TclÀº ÀÎÀÚµéÀ» ¾î¶»°Ô ¸í·É¾îµé¿¡°Ô ü°èÈ­ÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù. °¡Àå °£´ÜÇÑ °æ¿ì·Î °ø¹éÀ¸·Î ÀÎÀÚµéÀ» ±¸ºÐÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ¾Õ¿¡¼­µµ ¾ð±ÞÇßÁö¸¸ µû¿ÈÇ¥¿Í °ýÈ£´Â ¿©·¯°³ÀÇ ´Ü¾î¸¦ ÇϳªÀÇ ÀÎÀÚ·Î ¹­´Âµ¥ »ç¿ëµÈ´Ù. À§ÀÇ º¸±âÇÁ·Î±×·¥¿¡¼­µµ ½Öµû¿ÈÇ¥´Â ÇϳªÀÇ ÀÎÀÚ·Î ±×·ìÈ­µÇ¾î puts¸í·É¿¡¼­ »ç¿ëµÇ¾ú´Ù.

  2. °á°ú ´ëü. ÀÎÀÚµéÀÌ ¸ðµÎ ±×·ìÈ­µÇ°í³ª¸é TclÀº ¹®ÀÚ¿­ ´ëü¸¦ ½ÇÇàÇÑ´Ù.°£´ÜÈ÷ ¸»ÇÏÀÚ¸é $foo¸¦ fooº¯¼öÀÇ °ªÀ¸·Î ¹Ù²Ù´Â °ÍÀÌ´Ù.Áï °ýÈ£»çÀÌÀÇ ¸í·É¾îµéÀ» ±× ¸í·ÉÀÇ °á°ú·Î ¹Ù²Ù´Â °ÍÀÌ´Ù. ÀÌ ´ëü°úÁ¤Àº ÀϹÝÀûÀ¸·Î ±×·ìÈ­°¡ °áÁ¤µÇ°í ³­ ´ÙÀ½¿¡ ¼öÇàµÈ´Ù. ÀÌ ¼ø¼­¿¡ µû¶ó ÀÛ¾÷À» ¼öÇàÇϸé ÀÌ»óÇÑ °ªÀ¸·Î ¸í·É¾îÀÇ ±¸Á¶°¡ º¹ÀâÇØÁöÁö ¾Êµµ·Ï ÇØÁØ´Ù.

  3. ¸í·É ½ÇÇà. ´ëü°úÁ¤ÀÌ ³¡³ª¸é TclÀº ¸í·É¾îµéÀ» ½ÇÇàÅ×À̺íÀÇ Å°°ªÀ¸·Î »ç¿ëÇÑ´Ù. °á±¹ Å×ÀÌºí¿¡¼­ ±¸ºÐµÈ CÇÁ·Î½ÃÁ®¸¦ È£ÃâÇÏ°Ô µÇ°í, CÇÁ·Î½ÃÀú´Â ¸í·ÉÀ» ¼öÇàÇÏ°Ô µÈ´Ù.¿©·¯ºÐµµ Tcl¿¡¼­ ¸í·É¾î ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ÀÎÀÚ¸¦ Àü´ÞÇÏ°í ¿À·ù¸¦ ´Ù·ç±â À§ÇÑ °£´ÜÇÑ °ü·ÊÀÌ´Ù.
 

¶Ç´Ù¸¥ ¿¹Á¦

¿©±â ´Ù¸¥ ¿¹Á¦ Çϳª¸¦ »ìÆ캸ÀÚ.:

set i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }

¿©±â¼­ Áß°ýÈ£´Â ¾î¶² ´ëü°úÁ¤ÀÌ ÀϾÁö ¾Ê°Ô Çϸ鼭 ÀÎÀÚµéÀ» ±×·ìÈ­Çϱâ À§ÇÏ¿© »ç¿ëµÇ¾ú´Ù. TclÆļ­´Â while¸í·É¿¡ ´ëÇÏ¿© Ưº°ÇÑ µ¿ÀÛÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°í ÀÖ´Ù.¸¶Ä¡ ´Ù¸¥ ¸í·É¾îó·³ Ãë±ÞµÈ´Ù. while¸í·ÉÀÇ ½ÇÇàÀº ´ÜÁö ù¹ø° ÀÎÀÚ°¡ Ç¥Çö½ÄÀ̸ç, µÎ¹ø°ÀÎÀÚ°¡ Tcl¸í·É¾îµéÀ̶ó´Â °Í¸¸ ¾Ë°í ÀÖ´Ù. °ýÈ£·Î µÈ ±×·ìÀº µÎ°³ÀÇ ÀÎÀÚ¸¦ °¡Áö°í ÀÖ´Ù.: ·çÇÁÀÇ Á¦¾î¸¦ ´ã´çÇÏ´Â ºÒ¸°Ç¥Çö½Ä°ú ·çÇÁ°úÁ¤¿¡¼­ µ¿ÀÛÇÒ ¸í·É¾î·Î µÇ¾î ÀÖ´Ù.

¿ì¸®´Â µÎ°¡Áö ¼öÇÐÀû Ç¥Çö½ÄÀ» º¸¾Ò´Ù.: Çϳª´Â ºÒ¸° ¿¬»êÀ̸ç Çϳª´Â °¡°¨½ÂÁ¦·Î Ç¥ÇöµÇ´Â ¼ö½ÄÀÌ´Ù. while¸í·ÉÀº ÀÚµ¿À¸·Î ±× ù¹ø° ÀÎÀÚ¸¦ ¼ö½ÄÀ¸·Î Æò°¡ÇÑ´Ù. ´Ù¸¥ °æ¿ì¿¡¼­ ¿©·¯ºÐÀº ¹Ýµå½Ã Ưº°ÇÑ ¼öÇÐÀû °è»êÀ» ¼öÇàÇÏ·Á¸é expr¸í·É¾î¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.  

¸í·ÉÀÇ ½ÇÇà

¸¶Áö¸·À¸·Î TclÀº ¾î·Á¿î ¸î°¡Áö ÀÛ¾÷À» ÁøÇàÇϱâ À§ÇÏ¿© ¸î¸îÀ» È£ÃâÇÑ´Ù. ¿ì¸®´Â ÀÌ¹Ì TclÀÌ ¼öÇÐÇÔ¼ö¸¦ »ç¿ëÇϱâ À§ÇÏ¿© expr¸í·ÉÀ» »ç¿ëÇÏ°í, Ãâ·ÂÇÔ¼ö¸¦ ´Ù·ç±â À§ÇÏ¿© putsÇÔ¼ö¸¦ »ç¿ëÇϸç, º¯¼ö°ªÀ» ÁöÁ¤Çϱâ À§ÇÏ¿© set¸í·ÉÀ» »ç¿ëÇÑ´Ù´Â °ÍÀ» »ìÆ캸¾Ò´Ù. ÀÌ·¯ÇÑ Tcl¸í·É¾îµéÀº Tcl¿¡ µî·ÏµÇ¾î ÀÖ´Â CÇÁ·Î½ÃÀú¸¦ È£ÃâÇÏ¿© ½ÇÇàµÈ´Ù. C¸í·É¾î ÇÁ·Î½ÃÀú´Â Tcl¸í·ÉÇàÀ¸·ÎºÎÅÍ ¹®ÀÚ¿­ ÀÎÀÚ¸¦ ¹Þ¾Æ¼­ ±× °ªÀ» »õ·Î¿î ¹®ÀÚ¿­·Î µ¹·ÁÁØ´Ù. C¸í·É¾î ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇÏ´Â °ÍÀº ¸Å¿ì ½¬¿î ÀÏÀÌ´Ù. C¸í·É¾î ÇÁ·Î½ÃÀú¸¦ ÀÌ¿ëÇÏ¸é µ¥ÀÌÅͺ£À̽ºÀÇ Á¢±Ù¿¡¼­ºÎÅÍ ±×·¡ÇÈÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â µîÀÇ ÀϱîÁö ¸ðµç ÀÛ¾÷ÀÌ °¡´ÉÇÏ´Ù.¾ð¾î·Î¼­ÀÇ TclÀº ½ÇÁ¦·Î ±× ¸í·ÉÀÌ ¾î¶² ÀÏÀ» ÇÏ´ÂÁö ½ÇÁ¦·Î ¸ð¸¥´Ù. ´ÜÁö ÀÎÀÚµéÀ» ±×·ìÈ­ÇÏ°í, °á°ú¸¦ ġȯÇÏ°í, ¸í·É¾îµéÀ» ó¸®ÇÒ »ÓÀÌ´Ù.  

One Last Example

´ÙÀ½ ÇÁ·Î±×·¥Àº ÆÑÅ丮¾óÀ» ±¸ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.:

proc fac {x} {
    if {$x < 0} {
        error "Invalid argument $x: must be a positive integer"
    } elseif {$x <= 1} {
        return 1
    } else {
        return [expr $x * [fac [expr $x-1]]]
    }
}


 

´õ ÀÚ¼¼È÷ ¾Ë°í½ÍÀº µ¶ÀÚµéÀº

ÀÌ ±â»ç¿¡ »ç¿ëµÈ ¼Ò½º´Â ¿©±â¿¡ ÀÖ´Ù.: Scriptics
À¥ÆäÀÌÁö´Â ¸®´ª½ºÆ÷Ä¿½ºÀÇ ÆíÁýÆÀ¿¡ ÀÇÇØ °ü¸®µË´Ï´Ù.
© Brent B. Welch
LinuxFocus 1999