분류 전체보기 (199)
ººº::Development™:: (66)
ººº::Learning™:: (31)
ººº::Information™:: (37)
ººº::Note™:: (11)
ººº::Photo™:: (50)
ººº::zEtc™:: (3)
rss

믹시
tistory 티스토리 가입하기!
'얼랭'에 해당되는 글 6건
2008. 10. 6. 19:18
  지금까지 얼래에 관해 아주 간단하게나마 간을 보았다. 그런데 정작 프로그램같은 코드는 한줄도 작성해 보지 않았다. 그래서 이번 포스트부터 얼랭으로 간단한 프로그램을 만들어보고 컴파일하고 사용해 보도자.
그럼 처음으로 얼랭에서의 모듈에 관해 알아보자.

1. 모듈
  얼랭에서의 모듈은 코드의 기본 단위이다. 작성한 모든 함수는 모듈에 담기고, 이러한 모듈은 확장자 .erl인 파일로 저장된다. 또한 이렇게 작성된 모듈은 컴파일해야 하며, 컴파일된 모듈은 .beam확장자를 가진다.

다음내용을 geometry.erl파일로 저장한다.
-module( geometry ).
-export( [area/1] ).
area( {rectangle, Width, Ht } )   -> Width * Ht;
area( {circle, R} )                   -> 3.14159 * R * R.

위에서 -module은 해당하는 모듈의 이름이라고 생각하시면 되고, -export는 해당하는 모듈의 함수(?, 이 부분은 추후 다시 설명 )이름과 해당하는 함수의 파라미터 개수를 뜻한다고 생각하자. -module과 -export보다는 아래 내용에 중점을 두고, 위 내용을 간략하게 설명하겠다.
  area 함수는 두 절( clause )로 구성되며, 두 절의 각 패천은 정확하게 하나의 절과 대응한다. 풀어 설명하면 geometry:area( {rectangle, 10, 5} )를 호출하면, 첫번째 절과 매치하게 된다. 이해가 잘 안되면 컴파일 하고 실행해보면서 이해를 해보자.

  먼저 위 내용을 컴파일 하기 전에 위 파일은 erl을 실행하는 폴더에 존재해야 한다. 즉, C:\temp 폴더에서 erl을 실행하면 위 파일은 c:\temp 폴더에 존재해야 한다. 만약 다른 폴더에서 erl을 실행했다면 erl 콘솔에서 "cd( "변경하고자 하는 폴더 path" )." 명령어를 통해 폴더를 변경해 주어야 한다.
1> c( geometry ).
{ok, geometry}
2> geometry:area( {rectangle, 10, 5}).
50
3> geometry:area( {circle, 1.4} ).
6.15752

1번째 라인에서 c( geometry ) 명령을 통해 geometry.erl 파일의 코드를 컴파일 한다. 2와 3번째 라인에서 geomery 모듈에 있는 함수를 호출한다. 함수 이름과 함께 모듈 이름도 포함하고 있음에 유의해서 보자.

  어떻게 위 내용을 통해 모듈에 관해 조금이나마 이해가 되는지 모르겠다. 나는 이 코드를 통해 일단 가장 기보닝 되는 내용은 이해가 되기는 했지만 머 아직도 이해의 폭은 좁고 설명하기에는 많이 부족한거 같다. 다음 포스트에서 함수에 관해 좀더 포스팅을 하다보면 조금 이나마 이해의 폭을 넓일수 있을 것이다.

그럼 이 글을 읽는 모든 분들에게 즐겁고 행복한 일만 가득하기를 기원합니다.!


2008. 10. 6. 18:53
지금까지 얼랭에 관해서 포스팅을 하면서 메모장과 콘솔에서만 작업을 해왔는데 앞으로 좀더 많은 코드들을 작성하다보면 메모장만으로는 힘들꺼 같다는 생각.. 그래서 찾아본 Eclipse플러그인!..바로 구글에서 검색 ...
ㅋㅋ 역시 있다. Eclipse에서 얼랭 프로그래밍이 가능한 플러그인이 존재한다.


바로 설치 후 Eclipse를 실행하면 아래와 같이 Erlang project를 생성할 수 있다.


위와 같이 얼랭 프로젝트를 생성하고 실행하면 된다.! 아직 Eclipse에서 얼랭을 컴파일하고 실행하는 부분은 찾아보지 못해서 그 부분은 추후 다시 한번 포스팅 하도록 하겠다.

그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복한 하루 되시길 ...

'ººº::Development™:: > ::zEtc™::' 카테고리의 다른 글

[Pattren] Iterator 패턴 - Java  (0) 2008.11.21
[Erlang] 초간단 순차 프로그램  (1) 2008.10.06
[Erlang] 얼랭 간보기 #2  (0) 2008.09.29
[Erlang] 얼랭 간보기..  (0) 2008.09.24
[Erlang] 얼랭 출발..  (0) 2008.09.18


2008. 9. 29. 20:00
지난번에 어텀, 튜플, 리스트등을 알아보았다. 오늘은 아주 간단하게 문자열에 관해서만 사설을 풀어놓고 다음 포스트에 얼랭에 관해 정말로 간을 함 보도록 하자.

1. 문자열
  얼랭에서의 문자열은 실제로는 정수의 리스트일 따름이다. 이해가 안되시는 분들이 있을거고 바로 이해되시는 분들도 있으실건데 항상 그렇지만 나중에 다 이해되는 날이 있을 것이다.!ㅋㅋ
얼랭에서의 문자열은 타 언어와 동일하게 큰따옴표( " )로 둘러싸면 된다.
1> Name = "Hello".
"Hello"
 위에서의 문자열은 앞에서 설명드렸듯이 개별 문자를 표현하는 정수 리스트들의 축약형일 뿐이다. 예를 들면
2> [1, 2, 3].
[1, 2, 3]
3> [83, 117, 114, 112, 114, 105, 115, 101].
"Surprise"
4> [1, 83, 117, 114, 112, 114, 105, 115, 101].
[1, 83, 117, 114, 112, 114, 105, 115, 101]
 위에서 보면 3번째에서 리스트 항목이 모두 출력 가능한 문자이기 때문에 문자열이 출력되고 동일한 리스트에 1이 추가된 4번째에서는 1이 출력가능한 문자가 아니기 때문에 그냥 정수 리스트가 출력된 것이다.

자 오늘은 아주 간단하게 문자열만 알아보았다. 이는 이제 시작일 뿐이고 다음 포스트에서 정말로 얼랭으로 아주 간단한 순차 프로그램을 작성해 보면서, 얼랭에 대해 좀더 간을 보도록 하자.

그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하기를..!^_^;


2008. 9. 24. 19:54
지난번 포스트에서 얼랭을 시작해봤다. 그럼 오늘은 얼랭을 시작했으니 이제 얼랭에 대해서 간을 함 봐보자. 여기서 간을 본다 하니무슨 음식도 아니고? 이러는 분들도 있겠지만 나도 그렇고 아직 얼랭의 간도 보기 전이니 그냥 간을 본다고 하자. 왜냐 얼랭을배우면서 이 부분이 아직 이해가 잘 안되는 부분이니깐!^_^;

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에 바인딩된 패턴이 일치하지 않기 때문에 에러를 발생시킨다.
즉, 예를 들면 얼랭에서의 "="는 수적적 의미의 "="와 비슷하다. 즉, 좌변과 우변의 결과가 동일하다라는 의미이다.

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}
  자 이렇게 튜플을 생성했다면 위 튜플을 사용해 보자.
4> {point, X, Y} = Point.
{point, 10, 45}
5> X.
10
6> Y.
45
  헉, 먼가 이상하지 않은가? 똑봐로 봤다. 튜플에서 어떠한 값을 추출하려면, 패턴 매칭 연산자 "="를 사용해야 한다. 다시 말해서 위의 4번에서 Point에서 point를 추출해서 X, Y에 각각 10과 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}]
자 이렇게 리시트를 생성했다면 리스트에서 해당하는 요소를 추출해보자. 이때 역시 패텬매칭을 유의해서 살펴보자. 우선 리스트에서 헤드와 꼬리를 분리해 내자
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번째 라인이 끝나면, 각각 어떻게 바인딩이 되는지 확인해 보면 될 것이다.

자 오늘도 여기까지 하고, 다음에 문자열을 시작으로 다시 시작해보도록 하겠다. 그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...


2008. 9. 18. 19:36
한시간동안 작성한 내용 다 날려먹고 다시 작성하네요..
지난번 포스티에서 얼랭을 배우면서 하나하나 내용을 정리한다고 했듯이 이번에 그 첫번째로 포스팅을 합니다. 즉, 저두 책을 조금 봤다는 내용이지요!!^_^..

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 ...
 또한, 진수 계산도 별 무리없이 사용 가능하다.
4> 16#cafe * 32#suger.
1577682511434

자 위와같이 아주 간단하게 얼랭으로 수직을 계산해 봤다. 이 때 눈치 빠르신 분들은 느겼을 것이다. 바로 모든 명령어의 끝이 "."으로 끝나는 것을 알 수 있다. 여기서 얼랭의 첫번째 문법을 배웠다. 얼랭은 C나 JAVA에서 ";" 으로 문장의 끝을 표현하듯이 "."으로 문장의 끝을 표현한다. 이것을 아주 중요하니 습관처럼 사용하기 바란다.

4. 변수
변수가 무엇인지는 말을 안해도 알것이고 얼랭에서의 변수는 아래와 같이 사용한다.
1> X = 123456.
123456
자 위와 같이 변수를 사용하면 된다. 머 다른 언어와 별 차이를 못느끼겠다. 하지만 여기서 다른 언어와 가장 큰 차이점이 있다. 얼랭에서의 변수는 "단일 할당 변수( Single assignment variable )"로 한번 할당이 이루어지면 더이상 해당하는 변수의 값을 바꿀 수 없다는 것이다. 만약 할당된 변수에 다른 데이터를 할당하고자 하면 얼랭은 오류를 토해내게 될 것이다.

다음 포스트에서 알려드리겠지만 얼랭은 기본적인 수학의 문법을 따르기 때문에 변수를 선언하고 사용하는데 다른 언어와 약간의 차이점이 있다. 또한 위와 같이 특정변수에 값이 할당되면 "바운드( bound )변수"라 부르고, 그렇지 않을 경우에는 "언바운드( unbound )변수" 라고 부른다..

자 오늘은 여기까지만 하고 다은포스트에 위 변수의 예기를 이어서 패턴, 어텀, 튜플 등에 대해서 알아보도록 하겠다. 처음에 작성한 이후 한번 날려먹고 나서는 내용이 많이 줄어든 감이 있지만 저와같이 처음 얼랭을 시작하시는 분들께 조금이나마 도움이 되길 ...

그럼 이 글을 읽는 모든 분들에게 오늘 하루 즐겁고 행복만이 가득하길...




2008. 9. 11. 18:52
사용자 삽입 이미지
얼마전에 이리 저리 블로그를 뒤적이는 가운데 신기한 글을 봤다. 바로 얼랭.. 얼랭.. 얼랭으로 무엇을 얼랭으로 이거를 해봤다.. 이런 글들이다. 이러지리 아는것도 없음서 궁금한건 못참는 성격이라 일단은 얼랭이 무엇인가 부터 찾아봤더니" 함수형 언어로 멀티코어에서 상당히 빠른 속도로 실행되는 프로그램을 작성할 수 있다." 라는 글들과 몇몇의 포스트를 확인 할 수 있었다.

이러한 가운데 그런가보다 하고 넘어갈려는 찰라.. 요즘 회사 업무도 안되고 먼가 새로운게 필요하다는 생각에 그래 이왕 궁금한점이 생겼는데 한번 배워보자라는 생각으로 덜컥 책부터 구입했다.
사용자 삽입 이미지


이제부터 하나하나 읽으면서 시작해야지 일과 중에는 힘들겠지만 그래도 일과 이후에 짬짬이 책보면서 코드 한줄 한줄 따라가다보면 좋겠지.. 이걸로 이전에 만들어놨던 프로그램을 좀더 빠른 속도로 처리할 수 있지 않을까? 등등 가지가지 생각을 가져보고 있다.

앞으로 열시미 아자아자 하나하나 둘둘, 하나 둘 계단을 올라가듯이 천천히 하지만 착실하게 올라가보자!! 아자아자!

일단 그 첫번째로 얼랭부터 다운받아서 깔고, 한 챕터를 끝낼때마다 이곳에 해당하는 챕터의 내용을 요약하고 내가 이해한 그대로 포스팅을 해나가겠다. 이 이유야 머 당연하겠지만 복습과 책속의 내용을 다시 한번 머릿속에 정리하는 과정, 또한 나와같이 시작하시는 분들을 위해 한줄!! 한사람의 생각보다는 여러사람의 생각이 좋고 그런 가운데 좋은 정보들이 생산될꺼 같다는 느낌에! ㅋㅋㅋㅋ

:: 얼랭 사이트 ::
www.erlang.org

:: 관련 도서 ::
Programming Erlang - 강컴

자 그럼 이포스트를 읽는 모든 분들께 오늘 하루 행복한 하루 되시길 기도드립니다.!


prev"" #1 next