파스칼의 삼각형 in Erlang



어제 erlangstudy 메일링리스트에 파스칼 삼각형 구현이 올라왔다. 요즘 프로그래밍을 너무 안해서 늦은 시각에도 불구하고 한 번 풀어봤다.

첫 번째 구현.

next(S) ->
next(S, [1]).
next([_], Acc) ->
[1|Acc];
next([A,B|L], Acc) ->
next([B|L], [A+B|Acc]).

triangle(N) ->
triangle(N - 1, [[1]]).
triangle(0, Acc) ->
lists:reverse(Acc);
triangle(N, [S|L]) ->
triangle(N - 1, [next(S),S|L]).


두 번째 구현. lists:foldl을 이용해서 코드를 더 줄였다. 함수 선언할 때 이름 중복 제거.

next(S) ->
lists:foldl(fun(A,[B|L]) ->
[A,A+B|L]
end, [0], S).

triangle(N) ->
lists:reverse(lists:foldl(fun(_,[S|_]=Acc) ->
[next(S)|Acc]
end, [[1]], lists:seq(1, N)))


저번의 조합, 순열 구현에서도 느꼈지만 수학 개념들을 프로그램으로 짜보면서 성질을 조금 더 이해할 수 있게 되었다. 꼭 실용적인 프로그램이 아니더라도 중고등학교 때 배웠는데 몰랐던 개념들을 알게 되니 기쁘다 ^^

by 이피 | 2008/03/05 22:58 | Erlang | 트랙백(1) | 덧글(5)

트랙백 주소 : http://colus.egloos.com/tb/4203076
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 일상 혹은 이상 at 2008/03/05 23:07

제목 : SICP : 연습문제 1.12
파스칼의 세모꼴 수를 만드는 프로시저 작성하기 (되도는 프로세스) 일단 파스칼의 세모꼴 수를 함수를 다음과 같이 정의해보았다. 1 => f(1, 1)1 1 => f(2, 1) f(2, 2)1 2 1 =......more

Commented by 오자 at 2008/03/05 23:13
코드가 너무 깔쌈해서 제 눈을 믿기가 어려워 손으로 풀어보고(머리가 안 따라준다는..) 오오.. 완전 감탄..-0-; 역시 고수.. 좋은 코드 잘 봤습니다~
(아침에 출근해서 올리신 거 보고 깜짝 놀랬어요. 코드도 코드지만.. 시간이..-_-;;)
Commented by 민달이 at 2008/03/05 23:44
저도 빨리 느껴보고 싶은 기쁨이네요. 근데 현실이 여러 가지로 암울하네요.
Commented by 이피 at 2008/03/07 00:07
ㅎㅎ. 요 며칠 귀로 듣고 사야할 오디오를 눈으로만 보고 산다고 쇼핑하느라 좀 늦게 잤어요.

There is __a__ better way to do it.
Commented by 래퍼백곰 at 2008/03/09 00:08
난 이 기쁨은 포기다.. 스터디 3개에 번역까지 하니 gg야.....ㅠ_ㅠ
Commented by ologist at 2008/03/09 09:05
역시 멋져!

:         :

:

비공개 덧글

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