<?xml version="1.0" encoding="Big5"?>
<?xml-stylesheet type="text/css" href="document.css"?>
<document xmlns:HTML="http://www.w3.org/1999/xhtml">
	<title>
	OTcl 語法簡介
	</title>
	<content>
	在開始使用 ns2 之前, 先簡介一下 OTcl 的語法, 因為 ns2 是以 OTcl 為前端, 撰寫 OTcl script 
	來模擬你想要模擬的網路情況. 雖然你也許不會 OTcl 也可以使用 ns2, 但是我相信如果你會 OTcl 語法,
    將可以使你使用 ns2 更方便. 以下將會以非常簡單的方式去簡介一下 OTcl 語法.
	<HTML:BR/>
	<subject>→ 設定變數</subject>
		<HTML:OL>
		<item><HTML:FONT color="green"># 設定 x 變數，x 值為100(注意這100是字串)</HTML:FONT></item>
		<item><HTML:B>set x 100</HTML:B></item>
		<HTML:BR/>
		<item><HTML:FONT color="green"># 設定 y 變數，y 值為200</HTML:FONT></item>
		<item><HTML:B>set y 200</HTML:B></item>
		<HTML:BR/>
		<item><HTML:FONT color="green">
		# 透過 expr 將 $x $y 當成數字作數學運算, 並設定 z 變數為300
		</HTML:FONT></item>
		<item><HTML:B>set z [expr $x+$y]</HTML:B></item>
		<HTML:BR/>
		<item><HTML:FONT color="green"># 設定 a = b = 100</HTML:FONT></item>
		<item><HTML:B>set a [set b 100]</HTML:B></item>
		<HTML:BR/>
		<item><HTML:FONT color="green"># 設定一個陣列叫 array_, 並把 array_(1) 的值設為27</HTML:FONT></item>
		<item><HTML:B>set array_(1) 21</HTML:B></item>
		</HTML:OL>	
	</content>
	<content>
	<subject>→ 基本的 if  else 和迴圈的寫法</subject>
	<item><HTML:B>if 的範例</HTML:B></item>
	<item>
	範例說明 : 如果變數 k 大於4, 則顯示出 "k &gt; 4", 反之則顯示 "k &lt; =4 ", 要注意的是 if 
	後面接的是大括號 "{", 不同於我們在 C 語言中所寫的 "(" , 要切記.
	</item>
		<HTML:OL>
		<item><HTML:B>if { $k>4 } {</HTML:B></item>
			<HTML:OL>	
			<item><HTML:B>puts " k &gt; 4 "</HTML:B></item>	
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>	
		<item><HTML:B>else {</HTML:B></item>
			<HTML:OL>
			<item><HTML:B>puts " k &lt; = 4 "</HTML:B></item>
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>	
		</HTML:OL>
	<HTML:BR/>
	<item><HTML:B>while 的範例</HTML:B></item>
	<item>
	範例說明 : 下面程式, 代表一個 while 如在 i 大於等於0的情況下, 則將 b 的值和 i 相加並再回傳給 b, 
	然後 i 再減 1.	
	</item>	
		<HTML:OL>
		<item><HTML:B>set b 0</HTML:B></item>
		<item><HTML:B>set i 100</HTML:B></item>
		<item><HTML:B>while {$i &gt; = 0} {</HTML:B></item>
			<HTML:OL>	
			<item><HTML:B>set b [expr $b+$i]</HTML:B></item>
			<item><HTML:B>incr i -1</HTML:B></item>	
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>	
		</HTML:OL>
	<item><HTML:B>for 的範例</HTML:B></item>
		<HTML:OL>
		<item><HTML:B>for {set i 100} {$i &gt; =0} {incr i -1} {</HTML:B></item>
			<HTML:OL>
			<item><HTML:FONT color="green"># for 迴圈內所要執行的程式碼</HTML:FONT></item>	
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>
		</HTML:OL>		
	</content>
	<content>
	<subject>→ 副程式的寫法</subject>
		<HTML:OL>
		<item><HTML:FONT color="green"># 定義一個叫做 show 的 procedure	</HTML:FONT></item>
		<item><HTML:B>proc show {} {</HTML:B></item>
			<HTML:OL>
			<item><HTML:B>...</HTML:B></item>	
			<item><HTML:FONT color="green"># 副程式內容 </HTML:FONT></item>	
			<item><HTML:B>...</HTML:B></item>	
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>		
		</HTML:OL>
	<HTML:BR/>
		<HTML:OL>
		<item><HTML:FONT color="green"># 範例:  (計算x階乘的procedure)</HTML:FONT></item>
		<item><HTML:B>proc fac {x} {</HTML:B></item>
			<HTML:OL>
			<item><HTML:B>if {$x &lt; 0} {</HTML:B></item>
				<HTML:OL>	
				<item><HTML:B>error "Invalid argument $x: must be a positive integer"</HTML:B></item>
				</HTML:OL>
			<item><HTML:B>} elseif {$x &lt; = 1} {</HTML:B></item>
				<HTML:OL>
				<item><HTML:B>return 1</HTML:B></item>
				</HTML:OL>
			<item><HTML:B>} else {</HTML:B></item>
				<HTML:OL>
				<item><HTML:B>return [expr $x * [fac [expr $x-1]]]</HTML:B></item>
				</HTML:OL>
			<item><HTML:B>}</HTML:B></item>	
			</HTML:OL>
		<item><HTML:B>}</HTML:B></item>	
		</HTML:OL>	
	</content>	
	<content>
	<subject>→ 總結</subject>
		OTcl 語法大概就介紹到這邊, 底下並不會再介紹有關於物件導向的語法. 想要更進一步的探索 
		OTcl, 可以到<HTML:A href="http://bmrc.berkeley.edu/research/cmt/cmtdoc/otcl/">
		http://bmrc.berkeley.edu/research/cmt/cmtdoc/otcl/</HTML:A>此網頁獲得更多更詳細的
		OTcl 知識.
	</content>
</document>

