2008년 03월 08일
SICP Exercise 연습문제 3.6
이 문제는 난수를 만드는 rand 프로시저에서 상태변수를 바꾸도록 만드는 문제입니다.

하지만 아쉽게도 PLT-Scheme에는 rand-update 프로시저가 없었습니다.
그래서 제대로 짠 듯싶지만 결과를 확인할 수 없었습니다.
다행히도 구글 검색을 해보니 저보다 미리 풀어놓은 사람이
random-seed라는 프로시저를 소개하였습니다.
'http://eli.thegreenplace.net/2007/09/27/sicp-sections-312-313'
해당 프로시저는 random 프로시저에 seed를 넣는 함수입니다.
C에서 srand 함수와 같네요.^^
그 후 seed로 255와 65535, 다시 255을 넣어서 어떻게 나오는지 확인하였습니다.
확실히 seed가 같으니 그 결과도 같이 나오네요.^^;;
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 300
http://eli.thegreenplace.net/2007/09/27/sicp-sections-312-313
; section 3.1.2
;(define random-init 7)
;(define rand
; (let ((x random-init))
; (lambda ()
; (set! x (rand-update x))
; x)))
; answer
;(define (rand m)
; (cond ((eq? m 'generate)
; (let ((x random-init))
; (begin (set! x (rand-update x))
; x)))
; ((eq? m 'reset) (lambda (nv) (set! random-init nv)))
; (else (error "Unknown request -- RAND" m))))
(define (rand m)
(cond ((eq? m 'generate) (random))
((eq? m 'reset) (lambda (nv) (random-seed nv)))
(else (error "Unknown request -- RAND" m))))
((rand 'reset) 255)
(rand 'generate) (rand 'generate) (rand 'generate) (rand 'generate)
(newline)
((rand 'reset) 65535)
(rand 'generate) (rand 'generate) (rand 'generate) (rand 'generate)
(newline)
((rand 'reset) 255)
(rand 'generate) (rand 'generate) (rand 'generate) (rand 'generate)
# by | 2008/03/08 19:22 | in OCW | 트랙백 | 덧글(0)















☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]