アルゴリズムは理解していますが、スキームを使用してコードを機能させることができません。二分探索木を構築しています。ノードは(キー値)のペアです。Javaでは、コードは正常に機能します。
public void inOrder(BinaryNode n) {
if (n != null) {
inOrder(n.left);
System.out.println(n.value);
inOrder(n.right);
}
}
スキームでは、私の開始コードは次のとおりです。
(define empty ())
(define empty? null?)
(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 (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 (get-pair tn) (list (get-key tn) (get-val tn)))
(define (atom? tn) (and (empty? (get-left tn)) (empty? (get-right tn))))
(define (printInOrder t)
(if (not (empty? t))
(begin
(printInOrder (get-left t))
(get-pair t)
(printInOrder (get-right t))
)
)
)
ただし、printInOrderをテストする場合:
(define a (tree-node 3 30 empty empty))
(define b (tree-node 1 10 empty empty))
(define c (tree-node 2 20 b a))
(printInOrder c)
印刷する必要があります:
1 10
2 20
3 30
しかし、それは機能しません、何も印刷しません。
誰かがこの問題を手伝ってもらえますか?ありがとう。