trees.splay: fix delete-at.
parent
7d31da68b8
commit
ce1d69aa0a
|
@ -31,3 +31,8 @@ IN: trees.splay.tests
|
||||||
{ 1 "a" } { 2 "b" } { 3 "c" }
|
{ 1 "a" } { 2 "b" } { 3 "c" }
|
||||||
} >splay >alist
|
} >splay >alist
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[ 0 ] [
|
||||||
|
100 iota [ dup zip >splay ] keep
|
||||||
|
[ over delete-at ] each assoc-size
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -94,18 +94,13 @@ DEFER: (splay)
|
||||||
dup [ dup get-largest key>> swap splay-at ] when ;
|
dup [ dup get-largest key>> swap splay-at ] when ;
|
||||||
|
|
||||||
: splay-join ( n2 n1 -- node )
|
: splay-join ( n2 n1 -- node )
|
||||||
splay-largest [
|
splay-largest [ [ right<< ] keep ] when* ;
|
||||||
[ right<< ] keep
|
|
||||||
] [
|
|
||||||
drop f
|
|
||||||
] if* ;
|
|
||||||
|
|
||||||
: remove-splay ( key tree -- )
|
: remove-splay ( key tree -- )
|
||||||
[ get-splay nip ] keep [
|
2dup get-splay [
|
||||||
dup dec-count
|
|
||||||
dup right>> swap left>> splay-join
|
dup right>> swap left>> splay-join
|
||||||
swap root<<
|
>>root dec-count drop
|
||||||
] [ drop ] if* ;
|
] [ 3drop ] if ;
|
||||||
|
|
||||||
: set-splay ( value key tree -- )
|
: set-splay ( value key tree -- )
|
||||||
2dup get-splay [ 2nip value<< ] [
|
2dup get-splay [ 2nip value<< ] [
|
||||||
|
|
Loading…
Reference in New Issue