shen/release/test_programs/red-black.shen in shen-ruby-0.12.1 vs shen/release/test_programs/red-black.shen in shen-ruby-0.13.0

- old
+ new

@@ -1,55 +1,55 @@ -\**\ \* Copyright (c) 2011, Justin Grant <justin at imagine27 dot com> *\ \* All rights reserved. *\ \**\ \* Redistribution and use in source and binary forms, with or without modification, *\ \* are permitted provided that the following conditions are met: *\ \**\ \* Redistributions of source code must retain the above copyright notice, this list *\ \* of conditions and the following disclaimer. *\ \* Redistributions in binary form must reproduce the above copyright notice, this *\ \* list of conditions and the following disclaimer in the documentation and/or *\ \* other materials provided with the distribution. *\ \* Neither the name of the <ORGANIZATION> nor the names of its contributors may be *\ \* used to endorse or promote products derived from this software without specific *\ \* prior written permission. *\ \**\ \* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *\ \* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *\ \* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *\ \* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR *\ \* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *\ \* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\ \* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *\ \* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *\ \* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, *\ \* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *\ \**\ (datatype tree-node - - Key : number; Val : B; - ====================== - [Key Val] : tree-node;) - -(datatype color - - if (element? Color [red black]) - _______________________________ - Color : color;) - -(datatype tree - - if (empty? Tree) - ________________ - Tree : tree; - - Color : color; LTree : tree; TreeNode : tree-node; RTree : tree; - ================================================================ - [Color LTree TreeNode RTree] : tree;) - -(define node-key - {tree-node --> number} - [Key Val] -> Key) - -(define make-tree-black - {tree --> tree} - [Color A X B] -> [black A X B]) - -(define member - {tree-node --> tree --> boolean} - X [] -> false - X [Color A Y B] -> (cases (< (node-key X) (node-key Y)) (member X A) - (< (node-key Y) (node-key X)) (member X B) - true true)) - -(define balance - {tree --> tree} - [black [red [red A X B] Y C] Z D] -> [red [black A X B] Y [black C Z D]] - [black [red A X [red B Y C]] Z D] -> [red [black A X B] Y [black C Z D]] - [black A X [red [red B Y C] Z D]] -> [red [black A X B] Y [black C Z D]] - [black A X [red B Y [red C Z D]]] -> [red [black A X B] Y [black C Z D]] - S -> S) - -(define insert- - {tree-node --> tree --> tree} - X [] -> [red [] X []] - X [Color A Y B] -> (cases (< (node-key X) (node-key Y)) (balance [Color (insert- X A) Y B]) - (< (node-key Y) (node-key X)) (balance [Color A Y (insert- X B)]) - true [Color A Y B])) - -(define insert - {tree-node --> tree --> tree} +\**\ \* Copyright (c) 2011, Justin Grant <justin at imagine27 dot com> *\ \* All rights reserved. *\ \**\ \* Redistribution and use in source and binary forms, with or without modification, *\ \* are permitted provided that the following conditions are met: *\ \**\ \* Redistributions of source code must retain the above copyright notice, this list *\ \* of conditions and the following disclaimer. *\ \* Redistributions in binary form must reproduce the above copyright notice, this *\ \* list of conditions and the following disclaimer in the documentation and/or *\ \* other materials provided with the distribution. *\ \* Neither the name of the <ORGANIZATION> nor the names of its contributors may be *\ \* used to endorse or promote products derived from this software without specific *\ \* prior written permission. *\ \**\ \* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *\ \* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *\ \* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *\ \* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR *\ \* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *\ \* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *\ \* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *\ \* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *\ \* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, *\ \* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *\ \**\ (datatype tree-node + + Key : number; Val : B; + ====================== + [Key Val] : tree-node;) + +(datatype color + + if (element? Color [red black]) + _______________________________ + Color : color;) + +(datatype tree + + if (empty? Tree) + ________________ + Tree : tree; + + Color : color; LTree : tree; TreeNode : tree-node; RTree : tree; + ================================================================ + [Color LTree TreeNode RTree] : tree;) + +(define node-key + {tree-node --> number} + [Key Val] -> Key) + +(define make-tree-black + {tree --> tree} + [Color A X B] -> [black A X B]) + +(define member + {tree-node --> tree --> boolean} + X [] -> false + X [Color A Y B] -> (cases (< (node-key X) (node-key Y)) (member X A) + (< (node-key Y) (node-key X)) (member X B) + true true)) + +(define balance + {tree --> tree} + [black [red [red A X B] Y C] Z D] -> [red [black A X B] Y [black C Z D]] + [black [red A X [red B Y C]] Z D] -> [red [black A X B] Y [black C Z D]] + [black A X [red [red B Y C] Z D]] -> [red [black A X B] Y [black C Z D]] + [black A X [red B Y [red C Z D]]] -> [red [black A X B] Y [black C Z D]] + S -> S) + +(define insert- + {tree-node --> tree --> tree} + X [] -> [red [] X []] + X [Color A Y B] -> (cases (< (node-key X) (node-key Y)) (balance [Color (insert- X A) Y B]) + (< (node-key Y) (node-key X)) (balance [Color A Y (insert- X B)]) + true [Color A Y B])) + +(define insert + {tree-node --> tree --> tree} X S -> (make-tree-black (insert- X S))) \ No newline at end of file