Search Results for '얼랭'

2 POSTS

  1. 2008/08/11 최대 공약수 구하는 얼랭 코드 (8)
  2. 2008/07/16 얼랭을 얼렁 공부해 봅시다! (2)

오늘(10일 일요일) 얼랭 스터디에서,
달룟님이 GCD(최대 공약수)를 구하는 문제를 내셨다.

얼랭 - 최대 공약수 문제
(달룟님의 발표자료에서 캡쳐했다.)

두번째 문제는 스터디 시간 안에 풀지 못 했다. 아샬님과 솔리드원님의 코드에서 힌트를 얻고 집에 돌아왔다가, 한밤중에 갑자기 다른방법의 아이디어가 떠올라서 두번째 문제를 풀기 시작..

한................참을 삽질 하다가 -_-;;; 드디어 풀어냈다!! 감동 ㅠ_ㅠ
gcdm()의 얼랭 코드는 달랑 두 줄인데.. 두 시간 걸렸다. -_-;;;;;
익숙치 않은 함수형 언어라서, 간단한 문제임에도 굉장히;; 힘들었다. ㅠㅠ
코드는 가려놓으니, 얼랭을 공부중이면 한번 풀어보시길..
또는, Lisp, Scheme, Haskell 등으로 풀어도 신기할 것 같다.

============<코드 : 여기부터 드래그>============
gcdm(L) -> lists:max( [D || D <- lists:seq(1, lists:max(L)), is_divisible(D, L)] ).
is_divisible(D, L) -> lists:all(fun(X) -> (X rem D) =:= 0 end, L).

===============<여기까지 드래그>===============

p.s. 달룟님의 발표자료는 이쪽(클릭)이다. 킹왕짱임.


qsort([]) -> [];
qsort([Pivot|T]) ->
qsort([X || X <- T, X < Pivot])
++ [Pivot] ++
qsort([X || X <- T, X >= Pivot]).

 

위 코드는 얼랭(Erlang)으로 작성한 퀵소트이다. 2~5번 줄이 사실상 한 줄이니깐, 실제로는 두 줄짜리 코드이다. 간단히 설명을 하자면, [H|T]는 List를 첫번째 항목과 나머지로 나누는데, 리스트의 첫번째 항목을 Pivot으로, 나머지를 T에 대입한다. 두번째 리스트가 호출당하면, List comprehension을 사용하여 리스트에서 Pivot보다 작은 값과, 큰 값으로 나눠서, 재귀적으로 qsort()를 호출하고, 샤샤샥~ 파바바박~ 해서, 정렬된 왼쪽의 리스트와 Pivot과 정렬된 오른쪽의 리스트를 합쳐서 리턴한다. 오.. Sexy하지 아니한가?! 아님, 말고.. ;-p

자, 서론은 여기까지 하고, 온라인 학습 생태계의 프로그래밍 언어 스터디에서 얼랭 스터디를 모집중이다. 이번 7월 20일이 첫 모임이다.

왜 얼랭을 배워야 하나? 김창준님의 글을 인용/편집하면,

얼랭은 분산/병렬/동시성 프로그래밍을 적극적으로 지원하는 언어로(Concurrency Oriented Programming이라고도 합니다), 함수형(혹은 함수형 기반) 언어이면서 거의 유일하게 상업적으로 성공을 한 언어입니다. 에릭슨에서 만든 얼랭 2백만 라인으로 된 프로그램은 신뢰도(reliability)가 99.9999999%입니다. 9가 9개라서 nine nines라고 부릅니다. 업계에서는 9가 5개만 되어도 훌륭하다고 합니다(1년에 5.2분 동안만 다운). 9 일곱개는 거의 도달하기 어렵다고 알려져 있습니다. 그런데 9가 9개라니요. 1년에 다운되는 시간이 도합 3초 정도입니다.

코드가 2백만 라인인데, 1년에 다운타임이 3초라니.. 굉장하지 않은가? 이는 언어 자체에서 신뢰성을 보장해주는 여러가지 장치들이 있기 때문이다. (사실, 나도 60p 밖에 안 읽어서 잘.. -_-). 이 밖에도, 얼랭을 배워야 하는 여러가지 이유들이 있다. 얼랭에 관심이 땡기시는 분들은, 요 말랑말랑한 떡밥을 앙증맞게 물어주시고, 스리슬쩍 낚여주시길. (웃음)

스터디 모집은 이쪽으로 => http://langstudy.metaschool.org/4630

-- Jong10

p.s. 책을 보고 있는데, 61p의 두 줄짜리 예제가 이해가 안가서 좌절중.. -_-;;