얼랭홈페이지

얼랭나무위키


모바일 서버 프로그래밍에 관심이 생겨서 책을 찾아보다.

얼랭(함수형 언어)라는걸 처음 봤다.


흥미가 생겨서 바로 깔아봄.

아직 어떻게 쓰는지 모름.

이창을 쉘이라고 부르는다.


1.라인 : hello.라는 Atom형식의 문자값을 선언한 것이다.

2.라인 : hi. 도 Atom형식의 문자값을 선언한 것이다.


그럼 Atom은 뭔데...

Atom 형식은 상수다. 변경할 수 없는 그대로의 글자라고 생각하면 된다.

대문자로 시작하는 Atom을 정의하려면 작은 따옴표('')으로 감싸면 된다.


3.라인 : io 모듈의 format이라는 함수를 실행한 것이다. 인자값으로 Hello World!라는 문자열과 ~n 개행문자를 넣어서 화면에 출력하는 기능을 한다.

4.라인 : 쉘을 끌때 X를 눌러서 끄거나, q().를 입력하거나, init:stop()을 싱행하여 종료할 수 있다.


내가 사용해본 언어에서 끝을 표현하는게 세미콜론인데 얼랭에서는 점 인듯 ( ; == . )



계산 해보기.


+, -, *, / 사칙연산 가능.

div는 나눗셈의 몫만 가저오기.

rem 나머지 값만 계산하기.


변수 사용해보기.

얼랭에서 대문자로 시작하는 단어는 변수를 의미한다.


7.라인 : *1: variable 'Num' is unbound

Num은 아무런 값도 할당되지 않았기 때문에 애러가 났다.


8.라인 : Num = 10 

Num에 10을 대입한 것처럼 보이지만 바은 맞고 반은 틀리다.

얼랭에서의 = 연산자는 패턴매칭을 의미한다.

왼쪽과 오른쪽 값의 패턴을 비교한다는 뜻이다. 하지만 = 연산자 왼쪽의 변수가 값이 할당되지 않은 상태라면 오른쪽의 값을 왼쪽 변수에 할당하게 된다.

그래서 8번째 라인에서는 변수를 Num에 10을 할당하고 Six에 6을 할당하고, Num1에는 60을 할당한다.


11.라인 : Num1 = 1

Num1은 이미 할당되어 있다. 즉 60과 1의 패턴매칭을 적용한 셈이 된다. 서로 다른 패턴이기 떄문에 exception error가 발생함.


12.라인 : Num1 = 60

Num1과 60의 패턴매칭 한 것이다. 해당 값인 60이 리턴되었다, 얼랭에서는 변수에 한 번 값이 할당되면 변동할 수 없다.


이것은 single assignment라고 부르는 순수한 함수형 언어의 속성이기도 하다.

하나의 변수는 하나의 값만 갖게되므로 side-effect가 사라져서 프로그램의 동작을 보다 쉽게 이해할 수 있게 하고, concurrency 코드를 쉡게 작성할 수 있도록 한다.

만약 변수의 값이 변동 가능하다면, 동시에 해당 변수에 접근할 경우 race condition 문제가 발생하게 된다.

이를 처음에는 변수의 내용을 변경하지 못하는 것이 어색하겠지만 나중에는 깔끔하고 명료한 코드를 작성하는 데에 도움이 되는 것을 알 수 있을 것이다.


집합을 나타내보기.

값들의 집합을 나타내고 싶을땐 중괄호로 감싼 형식을 이용한다. 이를 튜플Tuple이라고 한다.

13. 라인의 {5,6}은 튜플 형식이다.

14. 라인은 x,y를 소문자로해서 에러남.

15 ] 잘못쓰고 .안찍고

15. {X,Y} = {5,6}. X에 5, Y에 6이 들어감

16, 17은 출력해봄.

18.라인 : L에 a,b,c,d,e를 넣음

L에 입력한 대괄호로 감싼 형식의 데이터를 리스트라고 한다. 얼랭에서 가장많이 사용되는 형식이다.

다른언어에서 배열과 비슷하게 생각하면 될 것 같지만 속성은 많이 다르다. 리스트 안에 튜플 값들을 넣어서 많이 사용하곤 한다.

19.라인 : L에 C,d,e를 뺌.

--연산자를 이용해서 리스트에서 특정 요소들을 제거해본 것이다.

다음에 << >> 로 감싼 데이터는 바이너리 형식을 의미힌다.

바이너리도 패턴 매칭을 이용해서 값을 바인딩 할 수 있다.

8bit 값을 바인딩 해서, 아스키 코드로 "h"를 의미하는 104가 변수H에 입력되었다.


멍...ㅋㅋㅋㅋ

반응형

'Programming > Blah Blah' 카테고리의 다른 글

빌드 이벤트(전, 후), 빌드 종속성(빌드순서)  (0) 2016.07.30
dll 만들기  (0) 2016.07.12
참조 카운트 Reference Count  (0) 2016.07.12
개발용 폰트  (0) 2016.07.07
포커스 핸들 컨트롤 하기(GetFocus & SetFocus)  (0) 2016.03.28
#region(리전) 간단설명  (0) 2016.03.27
Chunk 데이터 분산 처리  (0) 2016.02.18
모노디벨롭 설정 저장  (0) 2016.01.17