2007년 08월 20일
[erlang] 기본 자료형.
* 이름규칙
erlang은 몇가지 이름규칙을 사용하며, 이들을 통해서 크게 이들이 변수인지 혹은 함수인지를 판별합니다. 규칙은 매우 단순합니다.
1. 대문자로 시작하는 식별자 --> 변수
Feach, Xorig, Ntimes ...
2. 소문자로 시작하는 식별자, 혹은 작은 따옴표(')로 둘러쌓인 문자열 --> 심볼
map, lists, apples, 'foo bar'
변수는 말그대로 first-class 값들을 지정하는데 이용할 수 있습니다. 단, 다른 imperative언어들과는 달리 한번 선언한 변수는 이후에 변경될 수 없습니다.(즉, haskell등과 같이 변수는 문맥내에서 한번만 초기화될수있습니다.) 대입의 개념대신 선언을 이용합니다.
심볼은 기본적으로 평가될때 그 자체로 평가됩니다. 변수가 평가될때 그와 연관된 값으로 평가되는 반면에 심볼(atoms)은 그 자체로 평가된다. 혹은 표현식의 문맥에 따라서 그 심볼이 나타내는 모듈이나 함수, 혹은 다른 선언을 표현할 수 있다.
다른 언어들(루비, 파이썬, 펄...)등과는 달리 작은 따옴표를 사용하여 일반적인 문자열과 같은 방식으로 아톰을 지정할 수 있다는 점이 조금 특이하다.
* boolean, void
심볼의 연장선상에서 몇가지 특별한 심볼이 존재한다.
일반적인 언어들에서 진리값을 표현하는데 사용하는 true, false. 그리고 '없음'을 나타내는 값 void가 그것이다.
* numbers (integer, float, exponent, bases, character-code)
erlang은 다양한 수치를 나타내는 방법을 지원한다.
일반적인 정수/실수는 쉽게 나타낼 수 있다. (123, 437.3, -391 ...)
exponent 표기법을 이용하여 매우 크거나 작은수을 표기하는 방식도 제공한다. (3.14e-9, 42.0e9 ...)
다른 밑(base)을 갖는 수를 표현하기도 편리하다. (16#deadbeef, 36#foobarzoo, 2#00100 ...)
또한 문자 또한 그 문자에 해당하는 코드값을 정수로서 표현할 수 있다. ($A, $\n ...)
* 튜플, 리스트, 문자열
다수의 다른 값들을 포함하는 자료형으로서 튜플과 리스트를 먼저 생각할 수 있다. 전자는 고정된 길이, 후자는 가변적인 길이의 자료형으로 생각할 수 있다.
튜플 : {apples, 4, 'fresh'} ...
리스트 : [apples, oranges, grapes] ...
서로 괄호의 종류에 따라서 그 표현이 구분되며 이후에 설명할 패턴매칭에서 그 범위가 조금씩 다르므로 적절히 이를 구분하는것이 필요하다.
또한 erlang에서 문자열은 c/c++와 유사하게 단순히 각 문자를 담은 리스트일뿐이다.
<code>
> [$f, $o, $o, $b, $a, $r].
"foobar"
...
> lists:map(fun(C) -> io:format("~c", [C + 1]) end, "foobar").
gppcbs
...
</code>
* 바이너리
<code>
20> <<$f : 16, $o : 8, $o : 32>>.
<<0,102,111,0,0,0,111>>
...
</code>
<<...>> 사이에 각 바이트의 값을 넣거나 각 순열의 비트수를 지정하여 이진데이터를 쉽게 표현할 수 있도록 돕습니다.
* funs
다른 언어에서 lambda function, anonymous function, closure등으로 표현하는 익명 함수, 인라인 함수를 표현하는 방식입니다.
<code>
> Square = fun(X) -> X * X end.
> lists:map(Square, [1,2,3,4,5]).
...
</code>
간략하게 일반적으로 자주 보이는 erlang의 기본 자료형들에 대한 소개와 예를 보였습니다. 이외에도 reference, record, port, pid등의 자료형들이 더 있지만 이들에 대해서는 각각 필요한때에 그때그때 소개하도록 하겠습니다.
여기서 기본 자료형에 대해서 설명한 것 이외에도 이들과 관련된 표현식(패턴매칭이나 다른 표기법...)등은 더 존재합니다.
상수표현과 밀접한 관계를 갖는 패턴매칭은 차차 설명해가도록 하겠습니다.
erlang은 몇가지 이름규칙을 사용하며, 이들을 통해서 크게 이들이 변수인지 혹은 함수인지를 판별합니다. 규칙은 매우 단순합니다.
1. 대문자로 시작하는 식별자 --> 변수
Feach, Xorig, Ntimes ...
2. 소문자로 시작하는 식별자, 혹은 작은 따옴표(')로 둘러쌓인 문자열 --> 심볼
map, lists, apples, 'foo bar'
변수는 말그대로 first-class 값들을 지정하는데 이용할 수 있습니다. 단, 다른 imperative언어들과는 달리 한번 선언한 변수는 이후에 변경될 수 없습니다.(즉, haskell등과 같이 변수는 문맥내에서 한번만 초기화될수있습니다.) 대입의 개념대신 선언을 이용합니다.
심볼은 기본적으로 평가될때 그 자체로 평가됩니다. 변수가 평가될때 그와 연관된 값으로 평가되는 반면에 심볼(atoms)은 그 자체로 평가된다. 혹은 표현식의 문맥에 따라서 그 심볼이 나타내는 모듈이나 함수, 혹은 다른 선언을 표현할 수 있다.
다른 언어들(루비, 파이썬, 펄...)등과는 달리 작은 따옴표를 사용하여 일반적인 문자열과 같은 방식으로 아톰을 지정할 수 있다는 점이 조금 특이하다.
* boolean, void
심볼의 연장선상에서 몇가지 특별한 심볼이 존재한다.
일반적인 언어들에서 진리값을 표현하는데 사용하는 true, false. 그리고 '없음'을 나타내는 값 void가 그것이다.
* numbers (integer, float, exponent, bases, character-code)
erlang은 다양한 수치를 나타내는 방법을 지원한다.
일반적인 정수/실수는 쉽게 나타낼 수 있다. (123, 437.3, -391 ...)
exponent 표기법을 이용하여 매우 크거나 작은수을 표기하는 방식도 제공한다. (3.14e-9, 42.0e9 ...)
다른 밑(base)을 갖는 수를 표현하기도 편리하다. (16#deadbeef, 36#foobarzoo, 2#00100 ...)
또한 문자 또한 그 문자에 해당하는 코드값을 정수로서 표현할 수 있다. ($A, $\n ...)
* 튜플, 리스트, 문자열
다수의 다른 값들을 포함하는 자료형으로서 튜플과 리스트를 먼저 생각할 수 있다. 전자는 고정된 길이, 후자는 가변적인 길이의 자료형으로 생각할 수 있다.
튜플 : {apples, 4, 'fresh'} ...
리스트 : [apples, oranges, grapes] ...
서로 괄호의 종류에 따라서 그 표현이 구분되며 이후에 설명할 패턴매칭에서 그 범위가 조금씩 다르므로 적절히 이를 구분하는것이 필요하다.
또한 erlang에서 문자열은 c/c++와 유사하게 단순히 각 문자를 담은 리스트일뿐이다.
<code>
> [$f, $o, $o, $b, $a, $r].
"foobar"
...
> lists:map(fun(C) -> io:format("~c", [C + 1]) end, "foobar").
gppcbs
...
</code>
* 바이너리
<code>
20> <<$f : 16, $o : 8, $o : 32>>.
<<0,102,111,0,0,0,111>>
...
</code>
<<...>> 사이에 각 바이트의 값을 넣거나 각 순열의 비트수를 지정하여 이진데이터를 쉽게 표현할 수 있도록 돕습니다.
* funs
다른 언어에서 lambda function, anonymous function, closure등으로 표현하는 익명 함수, 인라인 함수를 표현하는 방식입니다.
<code>
> Square = fun(X) -> X * X end.
> lists:map(Square, [1,2,3,4,5]).
...
</code>
간략하게 일반적으로 자주 보이는 erlang의 기본 자료형들에 대한 소개와 예를 보였습니다. 이외에도 reference, record, port, pid등의 자료형들이 더 있지만 이들에 대해서는 각각 필요한때에 그때그때 소개하도록 하겠습니다.
여기서 기본 자료형에 대해서 설명한 것 이외에도 이들과 관련된 표현식(패턴매칭이나 다른 표기법...)등은 더 존재합니다.
상수표현과 밀접한 관계를 갖는 패턴매칭은 차차 설명해가도록 하겠습니다.
# by | 2007/08/20 01:18 | erlang -- nine 9's | 트랙백




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]