얼랭(Erlang, 영어: IPA: [ˈɜrlæŋ])은 범용 병렬 프로그래밍 언어이다. 함수형 언어가 효율적으로 산업 현장등에서 사용되는 유명한 사례이다.
원래는 에릭슨(Ericsson)사에서 스위칭 소프트웨어에서 사용하기 위해 개발했지만, 1998년에 오픈 소스로 공개되었다.
흔히 Erlang이라는 이름이 Ericsson Language에서 따온 것이라고 생각하지만, 실제로는 통신이론을 연구한 덴마크의 수학자 Agner Krarup Erlang의 이름에서 따온 것이다.
함수형 언어
다음은 계승 (수학)을 구하는 코드이다.
-module(fact).
-export([fac/1]).
fac(0) -> 1;
fac(N) when N > 0 -> N * fac(N-1).
다음은 퀵소트 알고리즘을 구현한 것이다.
%% quicksort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).
qsort([]) -> [];
qsort([Pivot|Rest]) ->
qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y >= Pivot]).
qsort
함수는 더 이상 정렬할 필요가 없을 때까지 자신을 재귀적으로 호출한다.
주의 : 위의 코드는 책 Programming Erlang(조 암스트롱)에 실려있는 코드이긴 하지만 실려있는 이유는 우아하기 때문이지 효율적이어서가 아니다. Erlang에서는 아래의 규칙을 벗어나게 프로그래밍 하는 것을 권장하지 않는다.
- 요소는 항상 리스트의 헤드(앞)에 추가한다.
- 순서가 문제가 되는 경우 lists:reverse/1을 호출한다. 이것은 매우 최적화되어있다.
따라서, List ++ [H]
와 같은 코드는 권장되지 않는다.
[ X || X <- Rest, X < Pivot]
이 부분은 "Rest
의 원소이고, Pivot
보다 작은 모든 X
를 선택하라"는 의미이다.
이를 응용하면 코드를 간결하면서도 강력하게 짤 수 있다. 아래는 모든 순열을 구하는 Erlang 코드이다.
perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L -- [H])].
같이 보기
각주
외부 링크
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.