'변수'에 해당되는 글 2건

  1. 2010/01/06 최근 근황 (2)
  2. 2008/09/01 Erlang for C programmers (2) : 타입과 변수 (2) (1)
Extremely Agile2010/01/06 17:18

이 글은 공중곡예사님의 2009년 12월 17일에서 2010년 1월 6일까지의 미투데이 내용입니다.

최근에 하고 있는 짓들이란게 이런거라는...ㅎㅎ
그래서 글도 잘 못쓰고 있습니다.
이 블로그에 가끔 들러주는 분들께 죄송할 따름...

다들 눈 많이 내리는 한겨울에 별 탈 없이 지내고 계신지...

저는 보시다시피 당분간은 아이폰 응용 개발이나
논문 작성 때문에 바쁠 예정이라 블로그에는 좀 소홀할 듯 싶습니다.

이 한 겨울에 다들 건강 조심하시고...

이런 식으로라도 가끔 글 남기도록 하겠습니다.

아이팟 터치가 두대가 생겨서 그래도 할 수 있는 것들이 좀 늘어나 즐겁네요.

대박까진 몰라도 뭔가 새로운 것들을 배울 수 있는 기회가 되었으면 좋겠습니다.
새로운 것을 배운다는 것은 언제나 즐거운 일이니까요.

(그래도 Objective-C에는 친숙해지기가 너무나 어렵군요. ㅎㅎ)

논문은 Consistent Hashing을 활용한 failover system 구현에 관한 것입니다.
잘 될지는 모르겠지만... 2월이 마감이라 이번 한달 동안은 꽤나 바쁠 것 같군요.
이제 실험도 착수해야하고... 논문도 고쳐야 하니까요.

사실 실험에는 젬병인데...
어떻게 해야 할지 고민도 많이 되는군요.

나이들어 박사학위 과정에 계속 머물러 있는 것도 부담이라
이번에는 어떻게든 끝내야 할텐데....

'Extremely Agile' 카테고리의 다른 글

관리자 법칙 (2)  (2) 2010/08/02
최근 생각들 & 교훈들  (0) 2010/07/06
관리자 법칙 (1)  (4) 2010/04/11
최근 근황  (2) 2010/01/06


Posted by 이병준

TRACKBACK http://www.buggymind.com/trackback/262 관련글 쓰기

댓글을 달아 주세요

  1. duru

    새해 첫 과업이 논문 통과군요.
    희망하시는 모든 일 다 이룰 거라 믿어 의심치 않습니다.^^
    더불어 건강 더 잘 챙기시고,,,
    최근 내 주위의 좋은 사람들이 하나둘 안 좋은 소식이 들리네유...ㅠ

    2010/01/12 10:55 [ ADDR : EDIT/ DEL : REPLY ]
    • 저도 그렇답니다. 좋은 소식 나쁜 소식... 요즘들어 그런 소식들이 끊이질 않네요. 새해 복 많이 받으시구요. 언제 인사드리러 한번 찾아뵙겠습니다.

      2010/01/12 12:56 [ ADDR : EDIT/ DEL ]

Languages/Erlang2008/09/01 17:07
앞선 글에서 Erlang의 타입 시스템이 C와 같은 프로그래밍 언어와 어떻게 다른지에 대한 이야기를 잠깐 했습니다. 아톰, 리스트, 투플 같은 낯선 언어 구조물들에 대한 언급도 잠깐 했었구요.

이번 글에서는 그 '낯선 구조물들'에 대한 설명을 조금 해 보려고 합니다. 먼저 아톰입니다.

Erlang에서 아톰은 소문자로 시작하는 이름입니다. 이름이라고는 하지만 그에 대응하는 값을 갖는 것은 아니고, 그 자체로 의미가 있습니다. Ruby라는 프로그래밍 언어에 익숙한 분이라면 아마 심볼(symbol)이라는 개념을 아실텐데요. Ruby에서 심볼은 다음과 같은 형태를 가집니다.

:foo

심볼은 그 자체로 유일합니다. Erlang의 아톰도 마찬가지입니다. C의 매크로 상수같은 것과 비슷한 개념이 아니냐고 물을 분도 계실텐데, #define을 사용해 정의한 매크로 상수들은 '값으로 치환되는 이름'이고 그 이름 자체가 비교의 대상이 될 수는 없기 때문에 같은 개념이라고 볼 수는 없습니다. 이해가 잘 되지 않는다면, 우선은 그냥 '사용자 정의 상수'쯤으로 생각해 버립시다. 그 이름이 곧 그 값인 상수 말이죠.

일례로, Erlang 셸에서 다음과 같이 아톰을 입력해 보면, 아톰 그 자체가 값으로 반환되는 것을 볼 수 있습니다. 별도의 값으로 치환되는 이름이 아니라는 뜻입니다. 아톰이 유용하게 사용되는 사례는 잠시 후 투플에 대해 설명하면서 살펴보도록 하겠습니다.

1> foo.
foo

투플은 C라면 구조체와 비슷한 개념인데, {와 }를 둘러싸 만듭니다. 가령 다음과 같은 C 구조체가 있다고 합시다.

struct Entry {
    int code;
    int value;
};

C에서 이 구조체로 변수를 만들고 그 값을 조작하려면 다음과 같이 하게 될 것입니다.

Entry a;
a.code = 3;
a.value = 12;

앞서도 말했지만 Erlang에는 '정적으로 변수에 타입을 준다'는 개념이 없기 때문에, 그냥 다음과 같이 합니다.

1> P = { 3, 12 }.

그런데 이렇게 하면 이 투플이 대체 무슨 투플인지 알 길이 전혀 없다는 문제가 있습니다. 그러므로 보통은 다음과 같이 하는 쪽을 선호합니다.

1> P = { entry, {code, 3}, {value, 12} }.

아톰을 통해 각각의 정보 단위에 이름을 주었다는 점을 유의해서 봅시다. 이렇게 하면 뭔가 잘 정의된 의미 구조를 갖는 투플을 만들고 사용할 수 있습니다. 그런데 대체 저 투플 안에 저장된 값을 뽑아낼때는 대체 어떻게 해야 하나요? -_-;;

앞선 글에서 = 연산자가 사실은 '대응 연산자'라고 말씀드렸던 것을 상기합시다. 값을 뽑아내려면, 이 연산자를 가지고 대응 규칙을 정의하면 됩니다. 다음을 보시죠. 붉은 색으로 표시한 부분은 아직 사용된 적이 없는 변수들이라는 점을 유의해 보십시다.

2> {entry, CodeTuple, ValueTuple} = P.
{entry,{code,3},{value,12}}
3> CodeTuple.
{code,3}
4> ValueTuple.
{value,12}

대응 연산자를 사용해 대응 규칙을 정의하고 있습니다. 대응 규칙이라는 좀 무시무시한 용어를 쓰긴 했습니다만, 사실 대층 규칙이라는 것은 별게 아닙니다. = 연산자 오른쪽에 오는 투플의 각 요소가 = 연산자 왼쪽에 오는 투플의 각 요소들에 어떻게 대응되는지를 명시하는 것에 불과합니다. 그 결과, CodeTuple은 {code, 3}에 대응되었고, ValueTuple은 {value, 12}에 대응되었습니다. 이런 식으로 하면 복잡한 투플 내의 임의 위치에 있는 값을 알아낼 수 있게 됩니다. 이 규칙을 조금 응용하면, 다음과 같이 해도 되겠군요.

5> {entry, {code, X}, {value, Y}} = P.
{entry,{code,3},{value,12}}
6> X.
3
7> Y.
12

이 예제들을 통해 아톰, 투플, 그리고 변수의 사용에 대해 약간의 감을 잡으셨을 수 있으리라 생각됩니다.

말씀드리는 김에 조금 더 나가볼까요? 대응 관계가 만들어진 변수를 통상 바운드(bound)된 변수라고 부릅니다. 그럼 언바운드 변수라는 것도 있나요? 네. 있긴 합니다. 언바운드 변수는 대응 규칙을 좀 더 느슨하게 만들고자 할 때 사용합니다. 다음 예제를 보시죠.

8> {_, {_, A}, {_, B}} = P.
{entry,{code,3},{value,12}}
9> A.
3
10> B.
12

언바운드 변수 '_'를 사용해서 대응 규칙을 만들면 투플의 구조만 일치하면 그 특정 위치에 오는 값을 뽑아낼 수 있습니다. (뽑아낼 수 있는 값에는 제한이 없습니다. 아톰이 될 수도 있고, 투플이 될 수도 있고, 리스트가 될 수도 있겠죠.)

그럼 이제 마지막으로 리스트에 대해서 말씀드리고 이번 글은 맺겠습니다. 리스트는 '['와 ',' 그리고 ']'를 가지고 만드는, 일련의 값의 묶음입니다. 묶이는 대상은 일반 값이 될 수도 있고, 투플이나 아톰이 될 수도 있고, 또다른 리스트가 될 수도 있습니다. 하나의 리스트 안에는 서로 다른 타입의 값들이 어떤 순서로도 저장될 수 있습니다.

11> L = [2, CodeTuple, ValueTuple, X, Y].
[2,{code,3},{value,12},3,12]

가령 지금까지의 예제들을 충실하게 실행한 상태에서 위와 같이 하면, 보시다시피 [2,{code,3},{value,12},3,12]의 리스트가 만들어지게 되죠.

[다음 글에서 계속...]






Posted by 이병준

TRACKBACK http://www.buggymind.com/trackback/157 관련글 쓰기

댓글을 달아 주세요

  1. <A href="http://blueandyellow.blog22.fc2.com/">SEX</A>できるサイト<A href="http://pyridoxiamine.blog34.fc2.com/">逆援助</A>専門の出会い<A href="http://gyakuenjyoyattemita.blog10.fc2.com/">逆援助</A>でセレブ女性とH<A href="http://douteiget.blog102.fc2.com/">童貞</A>喪失も可能<A href="http://hurinxxx.blog19.fc2.com/">不倫</A>

    2009/02/28 10:46 [ ADDR : EDIT/ DEL : REPLY ]