Factor 연습을 계속 - 평균 구하기
December 20th, 2007
Zed에게 낚여(?) FactorLanguage를 탐험하는 루비스트가 나만은 아니었다. (참조: 새로운 언어와 함께한 주말! Hello, Factor!)
브루스 윌리엄스가 자신의 글 5 Minutes with Factor의 마지막에서 정리한 내용에 꽤 공감된다.
Factor 프로그래밍은 강력한 제약이 있기 때문에(혹은 익숙치 않아서 나에게 제약으로 느껴지는지), 문제를 의미있는 작은 단위의 word로 잘게 쪼개서 정의하고, 거기에 적절한 이름을 붙이는 연습처럼 느껴진다. Thinking Forth도 함께 읽고 있는데, 어떤 면에서는 어셈블러 코드 수준으로까지 보이는데, 가독성을 아주 많이 고민하면서 개발하는 모습이 인상적이다.
그리고 스택을 다루는 워드들을 잘 숙지해야겠다. 이 부분은 연습이 좀 필요할 것 같다.
오늘은 평균 문제를 잠깐 풀어봤다. 코드 가독성이 좋아보이지는 않는다.
- ! 평균
: arithmetic_mean ( seq -- x ) [ length ] keep sum swap length /f ;
[ 46.2 ] [ { 29 8 75 97 24 40 21 82 77 9 } arithmetic_mean ] unit-test
! 기하평균
: geometric_mean ( seq -- x ) [ log ] map arithmetic_mean exp ;
[ 34 ] [ { 29 8 75 97 24 40 21 82 77 9 } geometric_mean round ] unit-test
! 조화평균
: harmonic_mean ( seq -- x ) [ geometric_mean 2 ^ ] keep arithmetic_mean / ;
[ 25 ] [ { 29 8 75 97 24 40 21 82 77 9 } harmonic_mean round ] unit-test
! RMS
: rms ( seq -- x ) [ 2 ^ ] map arithmetic_mean sqrt ;
[ 56 ] [ { 29 8 75 97 24 40 21 82 77 9 } rms round ] unit-test
! 가중치 평균
: weighted_sum ( seq1 seq2 -- x ) [ * ] 2map sum ;
: weighted_mean ( seq1 seq2 -- x ) [ sum ] keep swapd weighted_sum swap / ;
[ 44 ] [ { 29 8 75 97 24 40 21 82 77 9 } { 3 2 1 2 9 5 3 9 6 9 } weighted_mean round ] unit-test
읽기 편한 코드를 만들 수 있을 때까지 연습, 연습!




December 19th, 2007 at 05:18 PM 멋지세요 딥블루님 ! ㅎㅎ 저는 요즘에 루아를 만져볼까 아님 리습을 할까 고민 중이랍니다. ^^;
December 20th, 2007 at 02:38 AM 꼭 시험 기간이 되면, 시험 공부말고 다른 모든 일이 재밌잖아요? 그런 심리가 아닐까요? 요즘 Factor로 낑낑대며 코드 한줄 만드는게 상당히 재밌어요 ^^
December 20th, 2007 at 04:52 AM 이건 아무리 봐도 암호문인데요. ;;;
December 20th, 2007 at 05:22 AM 꼬루미// 그건 제가 아직 연습이 부족해서 ^^
December 20th, 2007 at 05:23 AM 8000개를 향해 달리고 있습니다 ㄷㄷㄷ codian님 지송 -_-;;;;