Extremely Agile2010.01.06 17:18

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

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

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

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

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

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

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

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

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

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

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

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

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. duru

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

    2010.01.12 10:55 신고 [ ADDR : EDIT/ DEL : REPLY ]

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 이병준

소중한 의견, 감사합니다. ^^

  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 ]