[erlang] operations

erlang에서는 기본적으로 제공하는 연산자(operators)을 operations라고 표현하는것 같습니다. 여기서는 일반적인 연산자들과 그 사용을 살펴보겠습니다.

* arithmetic operations : 일반적인 사칙연산자와 추가적인 정수연산을 위한 연산자로 구성됩니다.(+, -, *, /, div, rem)
 * +, -의 경우 binary-operator이외에도 값의 부호를 결정하기 위해 사용할 수 있습니다.
 * /연산자의 결과는 언제나 float인데 반해서 div의 경우 그 결과가 언제나 나머지를 제외한 정수의 몫만을 취합니다. 나머지를 구하고자 할때에는 rem 연산자를 이용합니다.
<code>
32> 7 div 2.
3
33> 7 rem 2.
</code>


* bit operations : integer에 대해서 적용할 수 있는 band, bor, bxor, bnot등의 기본적인 연산자와 bsl, bsr등의 bit-shift연산자를 제공합니다.
<code>
37> bnot 255.
-256
41> 2#101 band 2#011.
1
42> 2#101 bor 2#011.
7
43> 2#101 bxor 2#011.
6
46> 1 bsl 2.
4
47> 4 bsr 2.
1
</code>


* boolean operations : not, or, and, xor의 일반적인 불리언대수를 위한 연산자를 제공합니다.


* list operations : 리스트끼리의 연결(++)과 리스트에서 특정 요소만을 빼는 연산자(--)을 제공합니다.
<code>
35> [1,2,3] ++ [4,5,6].
[1,2,3,4,5,6]
36> [1,2,3,4,5,6] -- [1, 3, 5].
[2,4,6]
</code>


* term test operations : 다른 언어에서 말하는 equality, identity등과 크기비교등을 수행하는 연산자를 포함합니다. 다음과 같은 연산자들이 있습니다.
 * 대소비교 : <, >, =<, >=  -- le연산자가 다른 언어에서는 일반적으로 >= 와 같은꼴로 표현하는것과 다름을 주목합니다.
 * 동일성 : ==, /=, =:=, =/=

 동일성을 표현하는 연산자가 ==, =:=, /=, =/=와 같이 한가지가 더 있는것에 주목합니다. 전자의 경우 그 값이 같은 경우라면 같다고 판별하고 후자의 경우 완전히(타입등이) 같은 값일때에만 같다고 판별합니다. 예를 들어 다음과 같습니다.
<code>
26> 1 == 1.0.
true
27> 1 =:= 1.0.
false
</code>

 또한 =:=, =/=가 아닌 경우 서로 대소를 비교하거나 동일성을 비교하는데 type-coerce을 이용하거나 다음의 대소관계를 이용하여 이를 적용합니다.

 타입간의 대소관계:
 number < atom < reference < fun < port < pid < tuple < list < binary




* short-circuit operations : 일반적인 and, or 연산자는 연산자의 좌변을 평가한후 그 결과에 따라서 우변을 평가할지 하지 않을지를 결정합니다. 하지만 우변이 sideeffect등을 포함하는 경우에 이를 실행하여야할 경우도 있는데 이를 표현하기 위해 orelse, andalso의 연산자를 제공합니다. 용법은 일반적인 or, and와 동일하지만 그 의미는 우변의 실행이 좌변의 평가값에 관계없이 반드시 실행된다는것을 보장합니다.



erlang에서 다양한 자료형과 마찬가지로 풍부한 연산자를 기본적으로 제공함을 알 수 있습니다.


by 아겔 | 2007/08/20 01:53 | erlang -- nine 9's | 트랙백

트랙백 주소 : http://ageldama.egloos.com/tb/3345325
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

◀ 이전 페이지          다음 페이지 ▶