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))

insertこの方法を試しています

(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)))))))

これを使用して定義しています

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

DrRacketでこのエラーが発生しています

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

1 に答える 1

1

何が起こっているのかというと、ツリーノード(単なるリスト)が関数が期待される位置に返されているということです。スキームはリストを実行できません-それは関数ではないので、不平を言っています。

かっこをめちゃくちゃにしたからだと思います。

(cond (empty? t))

自己完結型の複合式です。それは評価され、tの値を返します。その後の式は、条件の一部として評価されません。

于 2012-10-16T09:02:52.287 に答える