2015년 7월 18일 토요일

싸이랩(scialb)의 tlist 와 mlist

tlist (typed list)

 tlist는 사용자에게 특수한 데이터 객체를 정의하고 연산자를 재정의할 수 있도록 하는 아주  유용한 기능을 제공한다.  tlist의 첫 번째 인수는 반드시 문자열 (혹은 문자열 벡터) 이어야 한다. 문자열 벡터인 경우 이것의 첫 요소는 정의되는 리스트의 이름이고 나머지 문자열은 뒤따라오는 객체의 이름 (필드명)이 된다. 예를 들면 다음과 같다.

>> tlA=tlist(['example', 'first', 'second'], 1.23, [1,2])
tlA  =
      tlA(1)
!example  first  second  !
      tlA(2)
    1.23  
       tlA(3)
    1.    2.  

>> type(tlA)
ans  =
   16.  

>> typeof(tlA)
ans  =
 example  

이 예에서 tlist()함수의 첫 번째 인수는 다음과 같은 문자열 행렬인데,

[ 'example', 'first', 'second' ]

첫 번째 요소 ‘example’은 이 리스트의 이름을 지정한다. 이 이름은 1024문자까지 지정할 수 있으나 연산자 오버로딩을 하기 위해서는 8자를 넘지 말아야 한다.  그 다음 ‘first’ 는 1.23을 가리키는 문자열키이고 ‘second’는 벡터 [1, 2]를 가리키는 문자열키이다. 예를 들어서 1.23이라는 값에 접근하기 위해서는 다음과 같이 하면 된다.

>> tlA(2) // 혹은
>> tlA(‘first’) // 혹은
>> tlA.first

두 번째 요소도 마찬가지로 접근해서 값을 읽거나 다른 값으로 설정할 수 있다. 만약 두 번째 요소를 문자열로 바꾸고 싶다면 다음과 같이 하면 된다.

>> tlA(2) = = “A new value” // 혹은
>> tlA.second = “A new value”

구조체의 경우와 마찬가지로 tlA.stringKey 와 같은 방식일 경우에는 stringKey는 일반적인 식별자 규칙을 따라야 한다. 하지만 tlA(‘stringKey’)와 같은 방식으로 접근하는 경우에 문자열키는 어떤 문자열이라도 상관없으며, 이 경우 문자열을 조합해서 아니면 문자열벡터의 한 요소로 네임키를 지정해 줄 수 있다는 장점을 가진다.

 똑 같은 tlist 를 다음과 같이 생성할 수도 있는데 구조체의 경우와 유사하다.

>> tlA=tlist(['example', 'first', 'second']) ;
>> tlA.first = 1.23 ;
>> tlA.second = [1 2] ;

mlist

 mlist (matrix-oriented typed list)는 전 절에서 설명한 tlist 와 유사하지만 한 가지 중요한 차이점이 있다. 그것은 필드값을 인덱스로 접근할 수 없다는 점이다.


댓글 없음:

댓글 쓰기