현재 작업 중인 건..
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. 휴가도 끝나고.. 내일 부터 다시 출근하려니.. 한숨만..-_-;
% ....
{ 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
권장되는 방식은 now()를 쓰는 겁니다.
>
> 하지만 여전히 erlang의 random:seed()가 어떻게 동작하는지는 잘 모르겠네요.
> 항상 고정된 default seed 값이 있는 건가..-_-a
네. 디폴트가 있습니다. 함수형 프로그래밍 언어에서는 random은 side-effect가 있고 non-determinant한
요소를 개입시키기 때문에 이런 방법을 씁니다.
get(random_seed)하면 현재 seed state를 가져올 수 있습니다.
자세한 내용은 lib/src/stdlib-*/src/random.erl 을 참고하세요.
인터페이스 보고 갔다 쓰기만 급급했는데.. 이제는 동작이 확실히 이해가 안 되면 소스를 뒤져 봐야겠네요~
On 8월5일, 오후11시49분, "June Kim" <junea...@gmail.com> wrote:
> 07. 8. 4, jahyun <icom...@gmail.com>님이 작성:
07. 8. 6, jahyun <ico...@gmail.com>님이 작성: