2012-10-16 2 views
1

key과 값 val을 트리 맵 t에 삽입하면 해당 위치에 키와 값이 포함 된 노드가있는 새 트리가 반환됩니다.스키마를 사용하여 이진 탐색 트리에 노드 키와 값을 삽입하십시오.

(define (tree-node key value left right)(list key value left right)) 

(define (get-key tn) (node_key tn)) 
(define (get-val tn) (node_val tn)) 
(define (get-left tn) (node_left tn)) 
(define (get-right tn) (node_right tn)) 

(define (node_key tn) (list-ref tn 0)) 
(define (node_val tn) (list-ref tn 1)) 
(define (node_left tn) (list-ref tn 2)) 
(define (node_right tn) (list-ref tn 3)) 

임 내가

(define right (insert (insert empty 3 10) 5 20)) 

를 정의하려면이 옵션을 사용하고

(define (insert t key val) 

    (cond (empty? t)) 
    (tree-node (key val '() '())) 

    ((equal key (get-key t)) 
    (tree-node (key val (get-left t) (get-right t))) 

    ((<key (get-key t)) 
    (tree-node ((get-key t) (get-val t) (insert (get-left t key val)) (get-right t))) 
    (tree-node ((get-key t) (get-val t) (get-left t) (insert (get-right t key val))))))) 

insert 방법을 시도하고 나는이 오류를 받고 있어요 :

나는이 정의되어 DrRacket

application: not a procedure; 
expected a procedure that can be applied to arguments 
given: (list 0 1 2) 
arguments...: [none] 

답변

1

트리 노드 (함수)가 예상되는 위치에 트리 노드가 반환되는 경우가 있습니다. Scheme은 목록을 실행할 수 없습니다. 함수가 아니므로 불평합니다.

나는 당신이 당신의 괄호를 엉망으로 만들었다 고 생각합니다.

(cond (empty? t)) 

은 자체 포함 된 표현식입니다. 그것은 평가되어 t 값을 반환합니다. 그 이후의 표현식은 cond의 일부로 평가되지 않습니다.

+0

많은 구문 오류가 있습니다. 코드에서 tree-node를 사용하는 것은 문법적으로 모호합니다. 저자는 네 가지 주장을 확실히해야합니다. 현재이 코드는 단일 인수를 제공하고 있음을 나타냅니다. 이 언어 클래스에서 함수를 호출하는 것은 * (function arg1 arg2 ...) *, function * (arg1 arg2 ...)이 아닙니다 * – dyoo

+0

원래 포스터의 질문에 다시 맞 춥니 다. 들여 쓰기 수준은 프로그램 구조가 엉망임을 분명히해야합니다. 'cond'에 속하는 것은 예를 들어 'cond'의 바깥에 있습니다. – dyoo