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
방법을 시도하고 나는이 오류를 받고 있어요 :
application: not a procedure;
expected a procedure that can be applied to arguments
given: (list 0 1 2)
arguments...: [none]
많은 구문 오류가 있습니다. 코드에서 tree-node를 사용하는 것은 문법적으로 모호합니다. 저자는 네 가지 주장을 확실히해야합니다. 현재이 코드는 단일 인수를 제공하고 있음을 나타냅니다. 이 언어 클래스에서 함수를 호출하는 것은 * (function arg1 arg2 ...) *, function * (arg1 arg2 ...)이 아닙니다 * – dyoo
원래 포스터의 질문에 다시 맞 춥니 다. 들여 쓰기 수준은 프로그램 구조가 엉망임을 분명히해야합니다. 'cond'에 속하는 것은 예를 들어 'cond'의 바깥에 있습니다. – dyoo