From 0def370ecd3baa31441b9ae514755cfa44a0c131 Mon Sep 17 00:00:00 2001 From: erana Date: Sat, 21 Jan 2012 23:00:11 +0900 Subject: [PATCH] xanadu - xml-tree --- scsh/xanadu/b-tree.scm | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/scsh/xanadu/b-tree.scm b/scsh/xanadu/b-tree.scm index fa9751a..d4f921b 100644 --- a/scsh/xanadu/b-tree.scm +++ b/scsh/xanadu/b-tree.scm @@ -80,12 +80,10 @@ (make-vector n-ary (make-b-tree-node #f #f)) (make-vector n-ary (make-b-tree-node #f #f))))) - (define (vector-median v) - (let ((len (ceiling (/ (vector-length v) 2)))) - (let ((retl (make-vector len (make-b-tree-node #f #f))) - (retr (if (odd? len) - (make-vector (+ len 1) (make-b-tree-node #f #f)) - (make-vector len (make-b-tree-node #f #f))))) + (define (vector-median j v) + (let ((len (vector-length v))) + (let ((retl (make-vector (- j 1) (make-b-tree-node #f #f))) + (retr (make-vector (- len (+ j 1)) (make-b-tree-node #f #f)))) (do ((i 0 (+ i 1))) ((= i len)(list retl retr)) (vector-set! retl i (vector-ref v i)) @@ -165,12 +163,13 @@ (else (add-rec str side-tree-node)))));;NOTE add-rec not the other add-rec ) ((let* ((data (((vector-ref side-tree i) 'get-data))) - (left-and-right (vector-median side-tree));;FIXME right also descend + (left-and-right (vector-median i side-tree));;FIXME right also descend (new-node (make-b-tree-node (car left-and-right) (cadr left-and-right))));;FIXME lenght mustbe n-ary - (or data (and (string? data)(string=? data ""))) + (or (not data) + (and data (string? data)(string=? data ""))) ((new-node 'set-data!) str) ;;((side-tree 'set-left-with-index!) i new-node) (vector-set! side-tree i new-node) @@ -184,7 +183,7 @@ (and (string? data) (string? str data))) - (let ((left-and-right (vector-median side-tree))) + (let ((left-and-right (vector-median i side-tree))) (let ((new-node (make-b-tree-node (car left-and-right) (cadr left-and-right)))) ((new-node 'set-data!) str) (vector-set! side-tree i new-node)