1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>highlight.sml</title>
<meta name="generator" content="KF5::SyntaxHighlighting - Definition (SML) - Theme (Breeze Dark)"/>
</head><body style="background-color:#232629;color:#cfcfc2"><pre>
<span style="font-weight:bold">datatype</span> Colour = R | B
<span style="font-weight:bold">datatype</span> 'a RBtree = E | N <span style="font-weight:bold">of</span> Colour * 'a * 'a RBtree * 'a RBtree
<span style="color:#7a7c7d">(* Dieses lookup funktioniert nur fuer Elemente vom Typ int *)</span>
<span style="font-weight:bold">fun</span> lookup (x,E) = <span style="font-weight:bold">false</span>
| lookup (x,N(_,y,l,r)) =
<span style="font-weight:bold">if</span> x < y <span style="font-weight:bold">then</span> lookup(x,l)
<span style="font-weight:bold">else</span> <span style="font-weight:bold">if</span> y < x <span style="font-weight:bold">then</span> lookup(x,r)
<span style="font-weight:bold">else</span> <span style="font-weight:bold">true</span>
<span style="font-weight:bold">fun</span> balance (B,x,N(R,y,N(R,z,t1,t2),t3),t4) =
N(R,y,N(B,z,t1,t2),N(B,x,t3,t4))
| balance (B,x,N(R,y,t1,N(R,z,t2,t3)),t4) =
N(R,z,N(B,y,t1,t2),N(B,x,t3,t4))
| balance (B,x,t1,N(R,y,N(R,z,t2,t3),t4)) =
N(R,z,N(B,x,t1,t2),N(B,y,t3,t4))
| balance (B,x,t1,N(R,y,t2,N(R,z,t3,t4))) =
N(R,y,N(B,x,t1,t2),N(B,z,t3,t4))
| balance t = N t
<span style="font-weight:bold">fun</span> insert(x,t) =
<span style="font-weight:bold">let</span>
<span style="font-weight:bold">fun</span> ins E = N(R,x,E,E)
| ins (t <span style="font-weight:bold">as</span> N(c,y,l,r)) =
<span style="font-weight:bold">if</span> x < y <span style="font-weight:bold">then</span> balance (c,y,ins l,r)
<span style="font-weight:bold">else</span> <span style="font-weight:bold">if</span> y < x <span style="font-weight:bold">then</span> balance (c,y,l,ins r)
<span style="font-weight:bold">else</span> t
<span style="font-weight:bold">val</span> N(_,y,l,r) = ins t
<span style="font-weight:bold">in</span> N(B,y,l,r)
<span style="font-weight:bold">end</span>
</pre></body></html>
|