Tcl and OTcl for ns
이글은 이동욱님의 글을 나름대로 요약한 것이다. 원문은 아래 링크에 있다.
http://netmedia.gist.ac.kr/~dulee/tclns.html
Introduction
ns는 IP 기반의 네트워크 시뮬레이터이다. ns-2는 시뮬레이션 객체를 생성하고 그들 사이에 적당한 링크와 시나리오를 만드는데 스크립트 언어를 사용한다. 그 스크립트 언어가 바로 Tcl과 OTcl이다.
여기서는 간단하게 Tcl과 OTcl의 문법에 대해 설명한다. 이건 ns-2를 다루는데 아주아주 기초적인 것이므로 ns-2를 공부하는 사람이라면 기본적으로 알고 있어야 하는 내용이다.
Basic Tcl constructs
Variables and arrays
Tcl에서 변수를 정의하는 것은 매우 간단하다.
변수 앞에 $을 붙이면 그 변수는 변수로 인식되지 않고 변수에 할당된 값으로 인식된다. 이를 변수치환이라고 한다.
수식을 계산하기 위해서는 expr 명령을 사용한다. 아래는 5*10의 결과를 계산한 후 var3에 정의하는 것이다.
Tcl에서는 배열도 지원하는데 사용방법은 아래와 같다.
첫 번째 예에서 배열명은 n이고, 인덱스는 숫자형이다. 두 번째 예에서 배열명은 opt이고 인덱스는 문자형이다.
For loops
For loop는 반복 작업을 간단하게 해주는 매우 유용한 명령어이다. 아래는 100개의 노드를 생성하는 예제이다.
While loops
For loop와 같은 기능을 한다. 아래는 For loop와 같은 예제이다.
If statement
If문도 역시 간단하다. 예제를 보면 쉽게 이해할 수 있다.
Procedures
프로시저는 c/c++에서 함수나 메서드와 같다고 생각하면 된다. 프로시저는 proc라는 키워드를 통해 선언할 수 있다. 아래는 프로시저를 선언하는 방법이다.
선언한 프로시저를 사용할 때는 단순히 프로시저명을 적어주면 된다.
매개변수가 있는 프로시저는 아래와 같이 선언한다.
매개변수를 사용하려면 매개변수를 프로시저명 뒤에 적어주면 된다.
OTcl constructs
OTcl은 Tcl에 Object Oriented 개념이 들어간 것이다.
OTcl classes and objects
OTcl은 class 키워드를 이용해서 클래스를 정의하고, superclass 키워드를 이용해서 상속을 한다. 그러나 클래스를 정의하면서 미리 멤버데이터를 정의할 순 없다. 클래스를 생성하고 객체를 생성하는 예를 보면 아래와 같다.
Class member functions
C++와 다르게 OTcl에서는 클래스를 만든 다음에 클래스 멤버 펑션을 정의한다.
MyNode 클래스에 memberfn1 이라는 프로시저를 정의하였다. 프로시저를 호출하는 예를 살펴보면 아래와 같다.
Class data
클래스 데이터 멤버는 instvar 키워드를 이용해 클래스 내에서 정의한다.
Object initialisation
C++에서는 객체를 생성할 때 생성자라는 메서드에서 멤버 데이터들을 초기화 해준다. OTcl에서는 C++과 유사한 기능을 init 키워드를 호출함으로써 할 수 있다.
OTcl에서도 C++과 마찬가지로 생성자에 파라미터를 추가할 수 있다.
http://netmedia.gist.ac.kr/~dulee/tclns.html
Introduction
ns는 IP 기반의 네트워크 시뮬레이터이다. ns-2는 시뮬레이션 객체를 생성하고 그들 사이에 적당한 링크와 시나리오를 만드는데 스크립트 언어를 사용한다. 그 스크립트 언어가 바로 Tcl과 OTcl이다.
여기서는 간단하게 Tcl과 OTcl의 문법에 대해 설명한다. 이건 ns-2를 다루는데 아주아주 기초적인 것이므로 ns-2를 공부하는 사람이라면 기본적으로 알고 있어야 하는 내용이다.
Basic Tcl constructs
Variables and arrays
Tcl에서 변수를 정의하는 것은 매우 간단하다.
set var1 1
set var2 "Tcl Variable 2"
set var2 "Tcl Variable 2"
변수 앞에 $을 붙이면 그 변수는 변수로 인식되지 않고 변수에 할당된 값으로 인식된다. 이를 변수치환이라고 한다.
puts "var1=$var1, var2=$var2"
var1=1, var2=Tcl Variable 2
var1=1, var2=Tcl Variable 2
수식을 계산하기 위해서는 expr 명령을 사용한다. 아래는 5*10의 결과를 계산한 후 var3에 정의하는 것이다.
set var3 [expr 5*10]
Tcl에서는 배열도 지원하는데 사용방법은 아래와 같다.
set n(0) [$ns node]
set n(1) [$ns node]
set n(1) [$ns node]
set opt(rp) DSDV
set opt(tr) "/tmp/temp.tr"
set opt(tr) "/tmp/temp.tr"
첫 번째 예에서 배열명은 n이고, 인덱스는 숫자형이다. 두 번째 예에서 배열명은 opt이고 인덱스는 문자형이다.
For loops
For loop는 반복 작업을 간단하게 해주는 매우 유용한 명령어이다. 아래는 100개의 노드를 생성하는 예제이다.
for {set i 0}{$i < 100}{incr i} {
set n($i) [$ns node]
}
set n($i) [$ns node]
}
While loops
For loop와 같은 기능을 한다. 아래는 For loop와 같은 예제이다.
set i 0
while {$i < 10} {
set n($i) [new Node]
incr i
}
while {$i < 10} {
set n($i) [new Node]
incr i
}
If statement
If문도 역시 간단하다. 예제를 보면 쉽게 이해할 수 있다.
if {$i < 10} {
puts "i is less than 10"
}
if {$var2 == "Tcl Variable 2"} {
puts "var2 = Tcl Variable 2"
}
puts "i is less than 10"
}
if {$var2 == "Tcl Variable 2"} {
puts "var2 = Tcl Variable 2"
}
Procedures
프로시저는 c/c++에서 함수나 메서드와 같다고 생각하면 된다. 프로시저는 proc라는 키워드를 통해 선언할 수 있다. 아래는 프로시저를 선언하는 방법이다.
proc proc1 {} {
puts "in procedure proc1"
}
puts "in procedure proc1"
}
선언한 프로시저를 사용할 때는 단순히 프로시저명을 적어주면 된다.
proc1
in procedure proc1
in procedure proc1
매개변수가 있는 프로시저는 아래와 같이 선언한다.
proc proc2 {parameter1} {
puts "the value of parameter1 is $parameter1"
}
puts "the value of parameter1 is $parameter1"
}
매개변수를 사용하려면 매개변수를 프로시저명 뒤에 적어주면 된다.
proc2 10
the value of parameter1 is 10
the value of parameter1 is 10
OTcl constructs
OTcl은 Tcl에 Object Oriented 개념이 들어간 것이다.
OTcl classes and objects
OTcl은 class 키워드를 이용해서 클래스를 정의하고, superclass 키워드를 이용해서 상속을 한다. 그러나 클래스를 정의하면서 미리 멤버데이터를 정의할 순 없다. 클래스를 생성하고 객체를 생성하는 예를 보면 아래와 같다.
class MyNode -superclass Node
set mynodevar [new MyNode]
set mynodevar [new MyNode]
Class member functions
C++와 다르게 OTcl에서는 클래스를 만든 다음에 클래스 멤버 펑션을 정의한다.
MyNode instproc memberfn1 {} {
puts "in member function 1"
}
puts "in member function 1"
}
MyNode 클래스에 memberfn1 이라는 프로시저를 정의하였다. 프로시저를 호출하는 예를 살펴보면 아래와 같다.
set myobj [new MyNode]
$myobj memberfn1
$myobj memberfn1
Class data
클래스 데이터 멤버는 instvar 키워드를 이용해 클래스 내에서 정의한다.
MyNode instproc memberfn2 {} {
$self instvar datamember1
set datamember1 "data member - memberfn2"
}
MyNode instproc memberfn3 {} {
$self instvar datamember1
puts "datamember1 = $datamember1"
}
$self instvar datamember1
set datamember1 "data member - memberfn2"
}
MyNode instproc memberfn3 {} {
$self instvar datamember1
puts "datamember1 = $datamember1"
}
set myobj [new MyNode]
$myobj memberfn2
$myobj memberfn3
MyNode 객체인 myobj를 생성한다. myobj 객체에서 memberfn2 프로시저를 호출하면 memberfn2 프로시저에서는 datamember1 데이터 멤버에 값을 할당한다. 다음에 myobj가 memberfn3을 호출하면 memberfn2에 할당된 값을 출력한다.$myobj memberfn2
$myobj memberfn3
Object initialisation
C++에서는 객체를 생성할 때 생성자라는 메서드에서 멤버 데이터들을 초기화 해준다. OTcl에서는 C++과 유사한 기능을 init 키워드를 호출함으로써 할 수 있다.
MyNode instproc init {} {
$self next
$self instvar datamember1
set datamember1 0
}
$self next
$self instvar datamember1
set datamember1 0
}
OTcl에서도 C++과 마찬가지로 생성자에 파라미터를 추가할 수 있다.
MyNode2 instproc init {arg1 arg2} {
$self next
$self instvar dm1 dm2
set dm1 $arg1
set dm2 $arg2
}
set mn2 [new MyNode2 1 2]
$self next
$self instvar dm1 dm2
set dm1 $arg1
set dm2 $arg2
}
set mn2 [new MyNode2 1 2]
http://www.joon.pe.kr/blog/trackback/57
http://xn--299aj0wmjfoqh97o.zxc700.com - 맞고사이트
http://xn--ok0b65d1w4aujecqm.zxc700.com - 정선카지노후기
http://xn--o80bq1nhvkvsd7rhba.zxc700.com - 마카오카지노순위
http://xn--c79a67g3zy6dt4w.zxc700.com - 카지노검증사이트
http://xn--o80b67oh5az7z4wcn0j.zxc700.com - 모바일카지노
http://xn--oi2b43dh5aa317l40j.zxc700.com - 모바일바카라
http://xn--o80bz00bbzcu6f.zxc700.com - 카지노
http://xn--oi2b30ghxt.zxc700.com - 바카라
http://xn--o80b910a26eepc81il5g.zxc700.com - 카지노사이트
http://xn--oi2b30g3ueowi6mjktg.zxc700.com - 바카라사이트
http://xn--o80b27i69npibp5en0j.zxc700.com - 온라인카지노
http://xn--oi2ba146a24mbtbtvt.zxc700.com - 온라인바카라
http://xn--mp2bs6av7jp7brh74w2jv.zxc700.com - 슬롯머신사이트
http://xn--ij2bx6j77bo2kdi289c.zxc700.com - 블랙잭사이트
http://xn--on3b21eb4bmwh91q.zxc700.com - 바카라주소