이 문제는 데이터베이스에서
어떤 열쇠에 맞는 레코드를 찾아내는 lookup 프로시저를 만드는 문제입니다.
책에 데이터베이스가 차례 없는 리스트로 구현되어있다면
lookup 프로시저를 어떻게 만들어야 하는지 예가 나와있습니다.
문제는 데이터베이스가 두 갈래 나무(binary tree)로 되어있을 때
같은 기능을 하는 lookup 프로시저를 만들어야 합니다.

잘 되는군요..가 아니네요.^^
왜냐하면 key 라는 프로시저를 모르니까요.
다만 두 갈래 나무로 만들어져있기에
그에 맞는 element-of-set? 프로시저를 변경하였습니다.(SICP 203쪽)
그리고 키가 숫자인지 어떤지 알 수없기에
less?, more?라는 프로시저를 만들어 후에 변경이 가능하도록 하였습니다.
(일단은 숫자로 생각하였습니다.)
참조
해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 209
(define true (= 0 0))
(define false (= 0 1))
; BINARY TREES
(define (entry tree) (car tree))
(define (left-branch tree) (cadr tree))
(define (right-branch tree) (caddr tree))
; answer
(define (lookup given-key set-of-records)
(let ((less? (lambda (a b) (< a b))) ; key표현에 따라 변할 수 있음.
(more? (lambda (a b) (> a b)))) ; key표현에 따라 변할 수 있음.
(cond ((null? set-of-records) false)
((equal? given-key (key (entry set-of-records)))
(entry set-of-records))
((less? given-key (key (entry set-of-records)))
(lookup given-key (left-branch set-of-records)))
((more? given-key (key (entry set-of-records)))
(lookup given-key (right-branch set-of-records))))))
- SICP Exercise 연습문제 2.69 (0)2008/02/25
- SICP Exercise 연습문제 2.68 (0)2008/02/25
- SICP Exercise 연습문제 2.67 (0)2008/02/25
- SICP Exercise 연습문제 2.66 (2)2008/02/25
- SICP Exercise 연습문제 2.65 (0)2008/02/25
- SICP Exercise 연습문제 2.64 (0)2008/02/25
- SICP Exercise 연습문제 2.63 (0)2008/02/25
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.







댓글을 달아 주세요
김프에는 script-fu 라는 것이 있습니다. 근래에 이 코드를 조금 보았는데, 꽤 재미있어 보이더군요.
하지만 할일이 태산이라 나중에 배워야지~ 하고 넘겼는데, 오늘 문득 NoSyu 님의 SICP 코드를 보니 많아 닮아있네요. 같은 scheme 쪽이라 그런가.. 나중에 NoSyu 님 도움을 좀 요청해야겠습니다. :)
/Mr.Dust/
그러고보니 전에 그림 언어를 할 때 라이브러를 찾다가 김프 script-fu가 scheme라는 것을 확인하였습니다.
그래서 익혀보려고 하였으나 후에 다른 라이브러리를 찾았기에 쓰지 않았습니다.
전 언어를 배우는 것이 아닌지라 과연 도움이 될지 모르겠습니다만,
제가 할 수 있는만큼 도와드리겠습니다.