Algebraic data types: Difference between revisions
Content added Content deleted
(Added Tcl implementation) |
((remove indent and) align balance's patterns in columns for clarity) |
||
Line 51: | Line 51: | ||
=={{header|Haskell}}== |
=={{header|Haskell}}== |
||
<lang haskell> |
<lang haskell>data Color = R | B |
||
data Tree a = E | T Color (Tree a) a (Tree a) |
|||
⚫ | |||
⚫ | |||
balance B (T R (T R a x b) y c ) z d = T R (T B a x b) y (T B c z d) |
|||
⚫ | |||
balance B (T R a x (T R b y c)) z d = T R (T B a x b) y (T B c z d) |
|||
balance B a x (T R (T R b y c) z d ) = T R (T B a x b) y (T B c z d) |
|||
balance B a x (T R b y (T R c z d)) = T R (T B a x b) y (T B c z d) |
|||
balance col a x b = T col a x b |
|||
balance col a x b = T col a x b |
|||
⚫ | |||
insert x s = T B a y b where |
|||
ins E = T R E x E |
|||
ins s@(T col a y b) |
|||
| x < y = balance col (ins a) y b |
|||
| x > y = balance col a y (ins b) |
|||
| otherwise = s |
|||
T _ a y b = ins s</lang> |
|||
T _ a y b = ins s |
|||
</lang> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |