'얼랭 공부'에 해당되는 글 2건
2008. 9. 24. 19:54
지난번 포스트에서 얼랭을 시작해봤다. 그럼 오늘은 얼랭을 시작했으니 이제 얼랭에 대해서 간을 함 봐보자. 여기서 간을 본다 하니무슨 음식도 아니고? 이러는 분들도 있겠지만 나도 그렇고 아직 얼랭의 간도 보기 전이니 그냥 간을 본다고 하자. 왜냐 얼랭을배우면서 이 부분이 아직 이해가 잘 안되는 부분이니깐!^_^;
1. 패턴 매칭
일반적인 언어에서 "="은 할당문을 나타낸다. 그러나 얼랭에서 "="는 패턴매칭 연산을 뜻한다. 언뜻 이해가 되지 않겠지만이전 포스트에서 변수에 한번 할당되면 그 변수의 값은 바뀌지 않는다고 했다. 이것과 연결해서 패턴매칭은 "Lhs = Rhs"이것에서 일반적인 언어에서 Rhs의 값을 Lhs에 대입하라는 것이 아니라 Rhs의 값을 계산한 다음 Lhs의 패턴과 매칭하라는것이다.
아직 이해가 되지 않겠지만, 그냥 그렇다라고 생각하자 아래 예는 패턴 매칭을 설명한다.
즉, 예를 들면 얼랭에서의 "="는 수적적 의미의 "="와 비슷하다. 즉, 좌변과 우변의 결과가 동일하다라는 의미이다.
2. 애텀( Atom )
애텀? Atom? 도대체 애텀이 머야? 얼래에서의 애텀은 수치가 아닌 상이한 불변 값을 나타내는데 사용한다. 이건 또 무슨 말인가? C나 자바에서의 열거형을 생각하면 쉽게 이해가 될 것이다. 이러한 애텀은 전역(global)으로 선언되며, 반드시 소문자로 시작해야 하고 _나 @와 같은 기호가 올수 있고 작은 따옴표로 묶을 수 있다.
이해가 안되시는 분들이 많이 있을 것이다. 사실 나도 잘 이해가 안되니 하지만 저번에도 말했듯이 언젠가는 이해가 되겠지..? 이런 마음으로 계속 진행을 해보자
3. 튜플( Tuple )
튜플? 와 도대체 이넘의 언어는 무슨 이런 말들이 많어? 도대체가 이해가 안되네. 하지만 나도 아직 많이는 보지 않았지만 내가 느낀 얼랭은 수학과 유사하다는 느낌이 많이 든다.( 여기저기 수학 공부를 많이 해야한다는 생각만..ㅜㅜ; 사실 수학하기 싫어서 컴터 전공했는데!ㅠㅠ; 후회 막심 )
머 다시 돌아와서 튜플은 C의 구조체와 유사하며, 다른 점은 형의 선언이나 그런거 없이 데이터의 집합체라고 보면된다. 나는 그냥 집합으로 이해하고 있다. 그런데 이러한 튜플을 코드로 읽거나 이해하기 편하게 첫번째 요소를 해당하는 튜플이 무엇인지를 나타내는 애텀으로 사용한다. 즉 { 10, 25 } 대신 { point, 10, 25 }라고 적는다.
자 그럼 튜플을 생성하고 사용해 보자
4. 리스트
튜플이 다수의 데이터들에 대한 묶음이라면, 리스트는 가변적인 개수의 데이터를 담아두는 집합이라고 생각하면 좀더 편할 것이다. 사실 나도 이렇게 이해하고 있다. 또한 리스트는 대괄호 []로 표현한다.
리스트도 첫번째 요소를 '헤드( head )'라고하고 이후의 나머지를 '꼬리( tail )'라고 부른다. 예를 들어 [1, 2, 3, 4, 5]에서 1이 헤드에 해당하고 나머지 "2, 3, 4, 5"가 꼬리에 해당한다. 머 말이 많아야 머하나 리스트를 생성하고 사용해보자.
자 오늘도 여기까지 하고, 다음에 문자열을 시작으로 다시 시작해보도록 하겠다. 그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...
1. 패턴 매칭
일반적인 언어에서 "="은 할당문을 나타낸다. 그러나 얼랭에서 "="는 패턴매칭 연산을 뜻한다. 언뜻 이해가 되지 않겠지만이전 포스트에서 변수에 한번 할당되면 그 변수의 값은 바뀌지 않는다고 했다. 이것과 연결해서 패턴매칭은 "Lhs = Rhs"이것에서 일반적인 언어에서 Rhs의 값을 Lhs에 대입하라는 것이 아니라 Rhs의 값을 계산한 다음 Lhs의 패턴과 매칭하라는것이다.
아직 이해가 되지 않겠지만, 그냥 그렇다라고 생각하자 아래 예는 패턴 매칭을 설명한다.
1> X = ( 2 + 4 ).
6
2> Y = 10.
10
3> X = 6.
6
4> X = Y.
=ERROR ...
위 예에서 보는거와 같이 처음에 X값과 Y값에 각각 6과 10이 바인딩 된 상태이다. 이 상태에서 3번째 라인은 X바인딩된 6과 정수 6의 패턴은 일치하기 때문에 에러가 안나지만, 4번째 라인에서는 X와 Y에 바인딩된 패턴이 일치하지 않기 때문에 에러를 발생시킨다.6
2> Y = 10.
10
3> X = 6.
6
4> X = Y.
=ERROR ...
즉, 예를 들면 얼랭에서의 "="는 수적적 의미의 "="와 비슷하다. 즉, 좌변과 우변의 결과가 동일하다라는 의미이다.
2. 애텀( Atom )
애텀? Atom? 도대체 애텀이 머야? 얼래에서의 애텀은 수치가 아닌 상이한 불변 값을 나타내는데 사용한다. 이건 또 무슨 말인가? C나 자바에서의 열거형을 생각하면 쉽게 이해가 될 것이다. 이러한 애텀은 전역(global)으로 선언되며, 반드시 소문자로 시작해야 하고 _나 @와 같은 기호가 올수 있고 작은 따옴표로 묶을 수 있다.
이해가 안되시는 분들이 많이 있을 것이다. 사실 나도 잘 이해가 안되니 하지만 저번에도 말했듯이 언젠가는 이해가 되겠지..? 이런 마음으로 계속 진행을 해보자
3. 튜플( Tuple )
튜플? 와 도대체 이넘의 언어는 무슨 이런 말들이 많어? 도대체가 이해가 안되네. 하지만 나도 아직 많이는 보지 않았지만 내가 느낀 얼랭은 수학과 유사하다는 느낌이 많이 든다.( 여기저기 수학 공부를 많이 해야한다는 생각만..ㅜㅜ; 사실 수학하기 싫어서 컴터 전공했는데!ㅠㅠ; 후회 막심 )
머 다시 돌아와서 튜플은 C의 구조체와 유사하며, 다른 점은 형의 선언이나 그런거 없이 데이터의 집합체라고 보면된다. 나는 그냥 집합으로 이해하고 있다. 그런데 이러한 튜플을 코드로 읽거나 이해하기 편하게 첫번째 요소를 해당하는 튜플이 무엇인지를 나타내는 애텀으로 사용한다. 즉 { 10, 25 } 대신 { point, 10, 25 }라고 적는다.
자 그럼 튜플을 생성하고 사용해 보자
1> F = { firstName, joe }.
{firstName, joe}
2> L = { lastName, armstrong }.
{lastName, armstrong}
3> Point = { point, 10, 45 }.
{point, 10, 45}
자 이렇게 튜플을 생성했다면 위 튜플을 사용해 보자. {firstName, joe}
2> L = { lastName, armstrong }.
{lastName, armstrong}
3> Point = { point, 10, 45 }.
{point, 10, 45}
4> {point, X, Y} = Point.
{point, 10, 45}
5> X.
10
6> Y.
45
헉, 먼가 이상하지 않은가? 똑봐로 봤다. 튜플에서 어떠한 값을 추출하려면, 패턴 매칭 연산자 "="를 사용해야 한다. 다시 말해서 위의 4번에서 Point에서 point를 추출해서 X, Y에 각각 10과 45를 바운드 시킨다. 이해가 되는가? 나도 사실 여기까지는 잘 안됬다. 하지만 책에서 그랬듯이 그냥 가다보면 이해가 될 것이다. 생각하고 그냥 가보는 수밖에{point, 10, 45}
5> X.
10
6> Y.
45
4. 리스트
튜플이 다수의 데이터들에 대한 묶음이라면, 리스트는 가변적인 개수의 데이터를 담아두는 집합이라고 생각하면 좀더 편할 것이다. 사실 나도 이렇게 이해하고 있다. 또한 리스트는 대괄호 []로 표현한다.
리스트도 첫번째 요소를 '헤드( head )'라고하고 이후의 나머지를 '꼬리( tail )'라고 부른다. 예를 들어 [1, 2, 3, 4, 5]에서 1이 헤드에 해당하고 나머지 "2, 3, 4, 5"가 꼬리에 해당한다. 머 말이 많아야 머하나 리스트를 생성하고 사용해보자.
1> ThingsToBuy = [{apples, 10}, {pears, 6}, {milk, 3}].
[{apples, 10}, {pears, 6}, {milk, 3}]
2> ThingsToBuy1 = [{oranges, 4}, {newspaper, 1}|ThingsToBuy].
[{apples, 10}, {pears, 6}, {milk, 3}]
자 이렇게 리시트를 생성했다면 리스트에서 해당하는 요소를 추출해보자. 이때 역시 패텬매칭을 유의해서 살펴보자. 우선 리스트에서 헤드와 꼬리를 분리해 내자[{apples, 10}, {pears, 6}, {milk, 3}]
2> ThingsToBuy1 = [{oranges, 4}, {newspaper, 1}|ThingsToBuy].
[{apples, 10}, {pears, 6}, {milk, 3}]
4> [Buy1|ThingsToBuy2] = ThingsToBuy1.
[{oranges, 4}, {newspaper, 1}, {apples, 10}, {pears, 6}, {milk, 3}]
5> [Buy2, Buy3|ThingsToBuy3] = ThingsToBuy2.
[{newspaper, 1}, {apples, 10}, {pears, 6}, {milk, 3}]
6> Buy2.
{newspaper, 1}
이 렇게 하면 Buy1에는 {oranges, 4}가 바인딩 되고 나머지가 ThingsToBuy2에 바인딩 된다. 이렇게 하나하나 패턴 매칭을 사용해 리스트에서 하나하나 요소를 추출하면 된다. 즉 5번째 라인이 끝나면, 각각 어떻게 바인딩이 되는지 확인해 보면 될 것이다.[{oranges, 4}, {newspaper, 1}, {apples, 10}, {pears, 6}, {milk, 3}]
5> [Buy2, Buy3|ThingsToBuy3] = ThingsToBuy2.
[{newspaper, 1}, {apples, 10}, {pears, 6}, {milk, 3}]
6> Buy2.
{newspaper, 1}
자 오늘도 여기까지 하고, 다음에 문자열을 시작으로 다시 시작해보도록 하겠다. 그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...
'ººº::Development™:: > ::zEtc™::' 카테고리의 다른 글
[Erlang] Eclipse에서 얼랭(Erlang)하기 (2) | 2008.10.06 |
---|---|
[Erlang] 얼랭 간보기 #2 (0) | 2008.09.29 |
[Erlang] 얼랭 출발.. (0) | 2008.09.18 |
[Erlang] 얼래을 시작하다.. (2) | 2008.09.11 |
[기사] 구글, 위치정보 파악용 '기어스지오로케이션 API'공개 (0) | 2008.08.26 |
2008. 9. 18. 19:36
한시간동안 작성한 내용 다 날려먹고 다시 작성하네요..
지난번 포스티에서 얼랭을 배우면서 하나하나 내용을 정리한다고 했듯이 이번에 그 첫번째로 포스팅을 합니다. 즉, 저두 책을 조금 봤다는 내용이지요!!^_^..
1. 얼랭 설치
- 다운로드 : http://www.erlang.org/download.html
- 윈도우 : 위 링크에서 바이너리 파일을 다운로드 받아서 여타 다른 어플리케이션을 설치하는 거와 동일하게
다음다음 누르면 설치 완료
- 리눅스 : 위 링크에서 소스코드를 다운받아 소스 컴파일을 하거나, yum을 사용해 설치하면 된다.( 소스 컴
파일 방법과 여타 다른 방법은 따로 설명을 하지 않겠습니다. )
그리고 앞으로의 얼랭 관련된 포스트는 모두 윈도우에서 작성된 내용을 기반으로 포스팅 하겠습니다.
2. 얼랭 실행
- 설치가 완료되면 시작 -> Erlang OTP XXX -> Erlang을 선택하면 얼랭 콘솔이 동작한다. 이 콘솔에서 기
본적인 명령을 실행해보고 결과를 확인할 수 있다.
- 만약 윈도우 PATH를 설정해 놓았다면 윈도우 콘솔에서 erl 명령어를 통해 바로 얼랭콘솔로 접속할 수 있
다.
3. 정수
얼랭은 정수의 범위가 따로 정해저 있는거 같지는 않다. 그냥 설정하는대로 엄청나게 큰 수까지 모두 계산을 할 수 있다.
자 위와같이 아주 간단하게 얼랭으로 수직을 계산해 봤다. 이 때 눈치 빠르신 분들은 느겼을 것이다. 바로 모든 명령어의 끝이 "."으로 끝나는 것을 알 수 있다. 여기서 얼랭의 첫번째 문법을 배웠다. 얼랭은 C나 JAVA에서 ";" 으로 문장의 끝을 표현하듯이 "."으로 문장의 끝을 표현한다. 이것을 아주 중요하니 습관처럼 사용하기 바란다.
4. 변수
변수가 무엇인지는 말을 안해도 알것이고 얼랭에서의 변수는 아래와 같이 사용한다.
다음 포스트에서 알려드리겠지만 얼랭은 기본적인 수학의 문법을 따르기 때문에 변수를 선언하고 사용하는데 다른 언어와 약간의 차이점이 있다. 또한 위와 같이 특정변수에 값이 할당되면 "바운드( bound )변수"라 부르고, 그렇지 않을 경우에는 "언바운드( unbound )변수" 라고 부른다..
자 오늘은 여기까지만 하고 다은포스트에 위 변수의 예기를 이어서 패턴, 어텀, 튜플 등에 대해서 알아보도록 하겠다. 처음에 작성한 이후 한번 날려먹고 나서는 내용이 많이 줄어든 감이 있지만 저와같이 처음 얼랭을 시작하시는 분들께 조금이나마 도움이 되길 ...
그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...
지난번 포스티에서 얼랭을 배우면서 하나하나 내용을 정리한다고 했듯이 이번에 그 첫번째로 포스팅을 합니다. 즉, 저두 책을 조금 봤다는 내용이지요!!^_^..
1. 얼랭 설치
- 다운로드 : http://www.erlang.org/download.html
- 윈도우 : 위 링크에서 바이너리 파일을 다운로드 받아서 여타 다른 어플리케이션을 설치하는 거와 동일하게
다음다음 누르면 설치 완료
- 리눅스 : 위 링크에서 소스코드를 다운받아 소스 컴파일을 하거나, yum을 사용해 설치하면 된다.( 소스 컴
파일 방법과 여타 다른 방법은 따로 설명을 하지 않겠습니다. )
그리고 앞으로의 얼랭 관련된 포스트는 모두 윈도우에서 작성된 내용을 기반으로 포스팅 하겠습니다.
2. 얼랭 실행
- 설치가 완료되면 시작 -> Erlang OTP XXX -> Erlang을 선택하면 얼랭 콘솔이 동작한다. 이 콘솔에서 기
본적인 명령을 실행해보고 결과를 확인할 수 있다.
- 만약 윈도우 PATH를 설정해 놓았다면 윈도우 콘솔에서 erl 명령어를 통해 바로 얼랭콘솔로 접속할 수 있
다.
3. 정수
얼랭은 정수의 범위가 따로 정해저 있는거 같지는 않다. 그냥 설정하는대로 엄청나게 큰 수까지 모두 계산을 할 수 있다.
1> 2 + 3 * 4.
14
2> ( 2 + 3 ) * 4.
20
3> 123456789 * 987654321.
XXXXXXXX ...
또한, 진수 계산도 별 무리없이 사용 가능하다.14
2> ( 2 + 3 ) * 4.
20
3> 123456789 * 987654321.
XXXXXXXX ...
4> 16#cafe * 32#suger.
1577682511434
1577682511434
자 위와같이 아주 간단하게 얼랭으로 수직을 계산해 봤다. 이 때 눈치 빠르신 분들은 느겼을 것이다. 바로 모든 명령어의 끝이 "."으로 끝나는 것을 알 수 있다. 여기서 얼랭의 첫번째 문법을 배웠다. 얼랭은 C나 JAVA에서 ";" 으로 문장의 끝을 표현하듯이 "."으로 문장의 끝을 표현한다. 이것을 아주 중요하니 습관처럼 사용하기 바란다.
4. 변수
변수가 무엇인지는 말을 안해도 알것이고 얼랭에서의 변수는 아래와 같이 사용한다.
1> X = 123456.
123456
자 위와 같이 변수를 사용하면 된다. 머 다른 언어와 별 차이를 못느끼겠다. 하지만 여기서 다른 언어와 가장 큰 차이점이 있다. 얼랭에서의 변수는 "단일 할당 변수( Single assignment variable )"로 한번 할당이 이루어지면 더이상 해당하는 변수의 값을 바꿀 수 없다는 것이다. 만약 할당된 변수에 다른 데이터를 할당하고자 하면 얼랭은 오류를 토해내게 될 것이다.123456
다음 포스트에서 알려드리겠지만 얼랭은 기본적인 수학의 문법을 따르기 때문에 변수를 선언하고 사용하는데 다른 언어와 약간의 차이점이 있다. 또한 위와 같이 특정변수에 값이 할당되면 "바운드( bound )변수"라 부르고, 그렇지 않을 경우에는 "언바운드( unbound )변수" 라고 부른다..
자 오늘은 여기까지만 하고 다은포스트에 위 변수의 예기를 이어서 패턴, 어텀, 튜플 등에 대해서 알아보도록 하겠다. 처음에 작성한 이후 한번 날려먹고 나서는 내용이 많이 줄어든 감이 있지만 저와같이 처음 얼랭을 시작하시는 분들께 조금이나마 도움이 되길 ...
그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...
'ººº::Development™:: > ::zEtc™::' 카테고리의 다른 글
[Erlang] 얼랭 간보기 #2 (0) | 2008.09.29 |
---|---|
[Erlang] 얼랭 간보기.. (0) | 2008.09.24 |
[Erlang] 얼래을 시작하다.. (2) | 2008.09.11 |
[기사] 구글, 위치정보 파악용 '기어스지오로케이션 API'공개 (0) | 2008.08.26 |
[기사스크랩] 가슴의 꿈을 현실로 만드는 기술( 기사제목 ) (0) | 2008.08.15 |