jahyun
unread,Mar 4, 2008, 9:27:19 AM3/4/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to erlangstudy
요새 SICP 문제 풀고 있는데 파스칼의 세모꼴이라는 문제가 나와서 풀어봤습니다. 간만에 작성한 erlang 코드라 올려봅니
다. (elem/2가 tail recursion이 아니라서 쫌 걸리네요..)
-module( pascal_triangle ).
-export( [print/1, all/1] ).
-include_lib("eunit/include/eunit.hrl").
print( N ) ->
print( N, all( N ) ).
print( _, [] ) ->
ok;
print( N, [ H | T ] ) ->
FmtStr = "~" ++ integer_to_list(N) ++ "c~p~n",
io:format( FmtStr, [ $ , H ] ),
print( N - 1, T ).
all( N ) ->
all( N, [] ).
all( 0, Acc ) -> Acc;
all( N, Acc ) ->
all( N - 1, [ set(N) | Acc ] ).
set( N ) ->
[ elem( N, Y ) || Y <- lists:seq( 1, N, 1) ].
elem( _, 1 ) ->
1;
elem( Y, Y ) ->
1;
elem( X, Y ) ->
elem( X - 1, Y) + elem(X - 1, Y - 1).
pascal_test_() ->
[
?_assertEqual( 1, elem( 1, 1 ) ),
?_assertEqual( 1, elem( 5, 5 ) ),
?_assertEqual( [1, 2, 1], set( 3 ) ),
?_assertEqual( [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]],
all( 5 ) )
].
25> pascal_triangle:test().
All 4 tests successful.
ok
26> pascal_triangle:all( 6 ).
[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],[1,5,10,10,5,1]]
27> pascal_triangle:print( 6 ).
[1]
[1,1]
[1,2,1]
[1,3,3,1]
[1,4,6,4,1]
[1,5,10,10,5,1]
ok
(뜬금 없이) 다들 건강하시죠?