이 문제는 연습문제 3.3에서 만든 계정에 다른 이가 접근할 수 있도록
make-joint 프로시저를 만들어야 합니다.

잘 되는군요.^^
원계정인 peter-acc의 암호는 open-sesame입니다.
따라서 해당 암호로 접근할 수 있습니다.
이를 복사한 paul-acc의 암호는 rosebud입니다.
따라서 open-sesame으로 접근할 수 없습니다.(실행줄 6번째 줄)
mike-acc는 원계정인 peter-acc의 암호를 제대로 넣지 못해서 에러가 떴습니다.
방법은 다음과 같습니다.
make-joint를 실행시키면 원계정의 암호가 같은지 확인합니다.
그리고 make-account처럼 dispatch라는 프로시저를 돌려줍니다.
이 프로시저는 패스워드와 메시지를 받아 새로운 패스워드를 확인한 후
처음 생성할 때 저장한 원계정(acc)를 돌려줍니다.
원계정의 비밀번호(password)도 미리 저장하였기에
새로운 패스워드만으로도 접근이 가능합니다.
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 308
(define true (= 0 0))
; answer
; exercise 3.3
(define (make-account balance password)
(define (withdraw amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds"))
(define (deposit amount)
(set! balance (+ balance amount))
balance)
(define (dispatch pw m)
(if (eq? m 'right-pw)
(right-pw? pw)
(if (eq? pw password)
(cond ((eq? m 'withdraw) withdraw)
((eq? m 'deposit) deposit)
((eq? m 'how-many-balance) balance)
((eq? m 'how-many-balance) balance)
(else (error "Unknown request -- MAKE-ACCOUNT"
m)))
wrongpw)))
(define (wrongpw amount) "Incorrect password")
(define (right-pw? pw) (eq? password pw))
dispatch)
(define (make-joint acc password new-password)
(define (dispatch pw m)
(if (eq? pw new-password) ; 새로운 사용자의 암호가 같은지 확인
(acc password m)
wrong-pw))
(define (wrong-pw amount) "Incorrect password")
(cond ((acc password 'right-pw) dispatch) ; 계정의 암호가 같은지 확인
(else (display "Incorrect password") (newline))))
; execute
(define peter-acc (make-account 100 'open-sesame))
(define paul-acc
(make-joint peter-acc 'open-sesame 'rosebud))
(define mike-acc
(make-joint peter-acc 'open-sesam 'rosebu))
((peter-acc 'open-sesame 'withdraw) 40)
((peter-acc 'rosebud 'deposit) 50)
((peter-acc 'open-sesame 'deposit) 50)
(newline)
((paul-acc 'open-sesame 'withdraw) 40)
((paul-acc 'rosebud 'withdraw) 40)
((paul-acc 'rosebud 'deposit) 50)
- SICP Exercise 연습문제 3.10 (0)2008/03/09
- SICP Exercise 연습문제 3.9 (0)2008/03/08
- SICP Exercise 연습문제 3.8 (2)2008/03/08
- SICP Exercise 연습문제 3.7 (0)2008/03/08
- SICP Exercise 연습문제 3.6 (0)2008/03/08
- SICP Exercise 연습문제 3.5 (0)2008/03/08
- SICP Exercise 연습문제 3.4 (0)2008/03/08
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.








댓글을 달아 주세요