hangman을 만들어보고 있습니다..

3 views
Skip to first unread message

jahyun

unread,
Jul 29, 2007, 11:19:27 AM7/29/07
to erlangstudy
concurrency도 연습할 겸해서 만들고 있습니다.
제가 지금까지 짠 erlang 프로그램 중에 가장 긴게 아닐까 싶은..

현재 작업 중인 건..
http://onebit.cafe24.com/pds/hangman.zip

지금으로서는 오답 입력 횟수라던지, 오답들 리스트를 보여준다던지 하는 것들은 추가로 구현해야할 것들이 꽤 남이있고, 여러 프로세
스를 운용할 때 종료 처리라던지 뭐 그런 부분은 제가 공부가 덜 되서 더 손을 봐야할 듯 하구요.

구조는 대충...

hm:run()을 호출하면, 단어가 입력된 파일에서 단어들을 읽어 리스트로 만들고, 이 리스트를 인자로 받는
main_loop()에 대한 프로세스(A)가 생성됩니다.(파일 액세스를 한번만 하기 위함)
hm:new()을 호출하면, 프로세스 A로 요청이 날아가고 프로세스 A는 단어 리스트에서 임의의 한 단어를 선택하여 이를 인자
로 전달 받는 sub_loop()에 대한 프로세스(B)를 생성한 후, sender한테 프로세스 B로 메지시를 전달하는 함수를 반
환합니다. 이 후 부터는 hm:new()에서 반환된 함수를 통해 프로세스 B와 통신하게 됩니다.


1> c(hm).
{ok,hm}
2> S = hm:run().
<0.189.0>
3> F1 = hm:new(S).
#Fun<hm.2.88058006>
4> F1($c).
"__c_____"
5> F1($v).
"v_c_____"
6> F1($a).
"vaca____"
7> F1($t).
"vacat___"
8> F1($i).
"vacati__"
9> F1($o).
"vacatio_"
10> F1($n).
[hangman] Your answer is correct!
"vacation"
11>

코드에서 단어를 선택할 때 random:uniform/0 를 호출해서 사용하는데요. 실행할 때마다 매번 같은 순서로 단어를 선택
하는 것 같아요. seed가 매번 같은 것이 들어가는게 아닌가 싶은데요..

C에서는 프로그램 시작 시에 srand( time(NULL) );을 넣주는데 erlang에도 이와 비슷한 기능이 있는지 궁금하네
요. (random:seed()라는 것이 있긴 한데 어떤 식으로 동작하는지 잘 모르겠음..)

ps. 휴가도 끝나고.. 내일 부터 다시 출근하려니.. 한숨만..-_-;

jahyun

unread,
Aug 4, 2007, 6:52:40 AM8/4/07
to erlangstudy
목마른 사람이 우물 판다고..;;
srand( time(NULL) ); 와 비슷한 방식으로 동작하게 하는 방법을 찾았습니다.

% ....
{ H, M, S } = time(),
random:seed( H, M, S ),
% ....

끝..

하지만 여전히 erlang의 random:seed()가 어떻게 동작하는지는 잘 모르겠네요.
항상 고정된 default seed 값이 있는 건가..-_-a

On 7월30일, 오전12시19분, jahyun <icom...@gmail.com> wrote:
> concurrency도 연습할 겸해서 만들고 있습니다.
> 제가 지금까지 짠 erlang 프로그램 중에 가장 긴게 아닐까 싶은..
>

> 현재 작업 중인 건..http://onebit.cafe24.com/pds/hangman.zip

June Kim

unread,
Aug 5, 2007, 10:49:25 AM8/5/07
to erlan...@googlegroups.com
07. 8. 4, jahyun <ico...@gmail.com>님이 작성:

> 목마른 사람이 우물 판다고..;;
> srand( time(NULL) ); 와 비슷한 방식으로 동작하게 하는 방법을 찾았습니다.
>
> % ....
> { H, M, S } = time(),
> random:seed( H, M, S ),
> % ....
>
> 끝..

권장되는 방식은 now()를 쓰는 겁니다.

>
> 하지만 여전히 erlang의 random:seed()가 어떻게 동작하는지는 잘 모르겠네요.
> 항상 고정된 default seed 값이 있는 건가..-_-a

네. 디폴트가 있습니다. 함수형 프로그래밍 언어에서는 random은 side-effect가 있고 non-determinant한
요소를 개입시키기 때문에 이런 방법을 씁니다.

get(random_seed)하면 현재 seed state를 가져올 수 있습니다.

자세한 내용은 lib/src/stdlib-*/src/random.erl 을 참고하세요.

jahyun

unread,
Aug 6, 2007, 8:58:36 AM8/6/07
to erlangstudy
창준님이 말씀하신대로 random.erl 소스를 보고 어느 정도 궁금증을 해결했습니다. :-)

인터페이스 보고 갔다 쓰기만 급급했는데.. 이제는 동작이 확실히 이해가 안 되면 소스를 뒤져 봐야겠네요~

On 8월5일, 오후11시49분, "June Kim" <junea...@gmail.com> wrote:
> 07. 8. 4, jahyun <icom...@gmail.com>님이 작성:

June Kim

unread,
Aug 6, 2007, 10:47:24 PM8/6/07
to erlan...@googlegroups.com
저는 erlang 라이브러리 소스를 직접 읽으면서 erlang style이 뭔지 많이 배웠습니다. 제가 통상 새로운 언어를
배울 때 곧잘 쓰는 방법 중 하나입니다.

07. 8. 6, jahyun <ico...@gmail.com>님이 작성:

Reply all
Reply to author
Forward
0 new messages