#title Erlang의 특징과 개념 [[TableOfContents]] ==== 함수형 언어 ==== * 기본 모델 * 수학 함수에 기반 * 함수를 값에 적용(application) * 매개변수 전달(parameter passing) * 반환 값(return value) * 특징 * 변수 및 배정문이 없음 * 자기호출(recursion)에 의한 반복 * 루프 같은 반복문은 없음 ==== 일반적인 특징 ==== * 루프 제어문이 없다. * 함수형 언어이기 때문에 모든 식은 값을 가져야 한다. * 데이터형에 대한 선언이 없다. (알아서 한다.) * = 는 할당문이 아니다. (Lhs = Rhs의 뜻: 오른쪽을 계산한 다음 왼쪽에 있는 패턴과 매치하라는 뜻) * 엄청나게 큰 숫자도 쉽게 계산할 수 있다. * Garbage Collector가 있다. ==== 변수의 특징 ==== * 변수는 대문자로 시작해야 한다. * 변수는 초기값이 없을 경우에만 값을 삽입(bound)할 수 있다. 값이 없는 변수는 Unbound 된 변수라고 한다. * 기본적으로 한 번 Bound된 변수는 다시 값을 할당할 수 없다. * 변수는 어떤 값에 대한 참조일 뿐이다. 그러므로 Atom, Tuple, Function과 같은 것들도 Bound 될 수 있다. ==== Atom ==== * 수치가 아닌 상이한 불변 값을 나타내는데 사용한다. (C의 열거형쯤 된다.) * 전역(Globle)이다. * 소문자로 시작해야 한다. * 대문자로 시작하려면 작음 따옴표(')를 써야 한다. 'a'와 a는 같다. 하지만 A와 'A'는 다르다. A는 변수로 인식하고 'A'는 Atom으로 인식한다. ==== Tuple ==== * Tuple은 C언어의 구조체쯤 된다. * 보통 P = {point, 4, 5} 와 같이 표현된다. * 역시 값이 이미 바운드 된 상태이므로 변경 불가능하다. ==== List ==== * 개수가 가변적인 데이터(erlang 데이터는 무엇이든)를 저장할 때 사용 * 변경 가능 * 대괄호([])로 둘러싸며, 요소들은 쉼표(,)로 구분 * 리스트 용어 * 헤드(head): 리스트의 첫 번째 요소 * 꼬리(tail): 헤드를 제외한 나머지 부분 * 대부분의 리스트 처리는 헤드를 처리하고, 그 다음 꼬리를 처리하는 식임. * []는 빈 리스트 * {{{[H|T]}}}도 리스트, 세로막대(|)는 헤드와 꼬리를 구분함. * {{{[H1|T1] = L.}}} 과 같이 패턴매칭으로 데이터를 추출함. * List-at-a-time: 함수를 한 번 호출하여 리스트 전체에 대한 무언가를 수행하는 연산 * 사이 추가 연산자(infix append operator)- L1=[1,2,3]이고, L2=[4,5,6] 일때 L1++L2와 같이 하면 [1,2,3,4,5,6]과 같이 된다. ==== 문자열 ==== * 정수 리스트다. * 큰 따옴표(")로 둘러싼다. * 출력은 터미널 로케일 및 문자 코드 설정에 따른다. * 요즘(2014-04)은 erl +pc unicode 과 같이 입력하고 erl 쉘에 들어간다. [http://www.erlang.org/doc/apps/stdlib/unicode_usage.html 참고] ==== fun ==== * 익명함수 * fun을 함수의 매개변수로 사용할 수 있고, 함수(or fun)가 fun을 반환할 수 있다.