이 문제는 데이터베이스에서

어떤 열쇠에 맞는 레코드를 찾아내는 lookup 프로시저를 만드는 문제입니다.

책에 데이터베이스가 차례 없는 리스트로 구현되어있다면

lookup 프로시저를 어떻게 만들어야 하는지 예가 나와있습니다.

문제는 데이터베이스가 두 갈래 나무(binary tree)로 되어있을 때

같은 기능을 하는 lookup 프로시저를 만들어야 합니다.

 

c6

잘 되는군요..가 아니네요.^^

왜냐하면 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))))))

크리에이티브 커먼즈 라이선스
Creative Commons License

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1381

댓글을 달아 주세요

  1. Mr.Dust 2008/02/25 19:46  댓글주소  수정/삭제  댓글쓰기

    김프에는 script-fu 라는 것이 있습니다. 근래에 이 코드를 조금 보았는데, 꽤 재미있어 보이더군요.
    하지만 할일이 태산이라 나중에 배워야지~ 하고 넘겼는데, 오늘 문득 NoSyu 님의 SICP 코드를 보니 많아 닮아있네요. 같은 scheme 쪽이라 그런가.. 나중에 NoSyu 님 도움을 좀 요청해야겠습니다. :)

  2. NoSyu 2008/02/25 20:17  댓글주소  수정/삭제  댓글쓰기

    /Mr.Dust/
    그러고보니 전에 그림 언어를 할 때 라이브러를 찾다가 김프 script-fu가 scheme라는 것을 확인하였습니다.
    그래서 익혀보려고 하였으나 후에 다른 라이브러리를 찾았기에 쓰지 않았습니다.
    전 언어를 배우는 것이 아닌지라 과연 도움이 될지 모르겠습니다만,
    제가 할 수 있는만큼 도와드리겠습니다.

[로그인][오픈아이디란?]