by Brent B. Welch About the author: Brent Welch 目前正有興趣於建立一個 www.scriptics.com 網站, 包括一個收集Tcl有關 的 URLs ( Tcl資源中心) 並加上註解的資料庫和一個TclPro Product的電子商務建設 (ecommerce infrastructure) 。他也在開發幾個大型的 Tcl/Tk應用程式,包括有在 www.scriptics.com 網站上執行的Tcl Httpd web 伺服器、Exmh 郵件使用者介面和 webtk HTML 編輯器。他是 " Tcl 和 Tk 程式設計實務 (Practical Programming in Tcl and Tk)" 一書的作者。Welch 於1982年在科羅拉多州Boulder大學航空工程系獲得 學士學位, 1986年在加州Berkeley大學取得資訊工程碩士學位, 1990年在加州Berkeley 大學取得資訊工程博士學位。Welch先前是 Xerox公司 PARC研究中心研究員之一成員, 研究分散式系統 (distributed systems)。然後他加入 Sun Microsystems 實驗室之 Tcl/Tk小組成員。他也是美國電腦協會(ACM)和國際電子工程師協會 (IEEE) 的會員。 首頁位址:http://www.beedub.com/ Content: |
Abstract:
這篇文章介紹了Tcl語言的基本觀念和語法。
以一種腳本語言來說, Tcl具有簡單的語法。
cmd arg arg arg
$foo
foo
.
[clock seconds]
"some stuff"
{some stuff}
\
下面是一個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]]"
利用Tcl parser 剖析Tcl語法必須使用以下三個步驟: 將參數分成群組, 結果替代和命令指派
puts
命令的一個參數。
$foo
的值替代了 foo
, 用結果替代了括弧命令。替代是在分組之後進行的。這種次序使特別的值並未使命令結構變複雜.
下面是另一個例子:
在此處, 大括弧用來將參數分組, 且並沒有做任何替代。 Tcl parser 了解set i 0 while {$i < 10} { puts "$i squared = [expr $i*$i]" incr i }
while
命令並沒有特別的地方, 就像對待其它的一般命令一樣。 while
命令利用 Tcl Parser 執行, 可知道第一個參數是運算式, 而第二個參數則是多個 Tcl 命令。 大括弧將它分成兩個參數:邏輯運算式與控制迴圈, Tcl 命令在迴圈部分。
我們看到了兩個數學運算式: 布林代數比較和乘法運算。while 命令自動將一個參數值當作運算式來計算。在其他的情況下, 您要明確使用
expr
命令來執行數學運算
最後, Tcl 呼叫其它程序來處理困難的工作。我們已經可看到 Tcl 使用 expr
命令來執行數學函數, puts
命令來處理輸出功能, set
命令來設定值給變數。這些 Tcl 命令是透過本身已在 Tcl 中登錄過 (Registered) 的 C 語言程序來執行的。C 語言的命令程序由 Tcl 命令取得字串參數, 然後傳回一個結果為一個新的字串。想要撰寫 C 語言命令程序很簡單。它可以做任何事情, 包括存取資料庫和建立圖形使用者介面。Tcl語言, 並不知道命令會有什麼樣的功用 , 它只是利用參數分群組, 結果替代和命令指派三步驟來執行命令。
這裡是一個階乘程序:
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]]] } }
Webpages maintained by the LinuxFocus Editor team
© Brent B. Welch LinuxFocus 1999 |
Translation information:
|
1999-10-28, generated by lfparser version 0.8