| author | kleing |
| Sat, 21 Nov 2009 17:04:03 +1100 | |
| changeset 33829 | 7277fa74120a |
| parent 33707 | 68841fb382e0 |
| child 34156 | 3a7937841585 |
| permissions | -rw-r--r-- |
| 28421 | 1 |
structure Example = |
2 |
struct |
|
3 |
||
4 |
fun foldl f a [] = a |
|
5 |
| foldl f a (x :: xs) = foldl f (f a x) xs; |
|
6 |
||
7 |
fun rev xs = foldl (fn xsa => fn x => x :: xsa) [] xs; |
|
8 |
||
9 |
fun list_case f1 f2 (a :: lista) = f2 a lista |
|
10 |
| list_case f1 f2 [] = f1; |
|
11 |
||
| 29798 | 12 |
datatype 'a queue = AQueue of 'a list * 'a list; |
| 28421 | 13 |
|
|
33707
68841fb382e0
dropped obsolete documentation; updated generated sources
haftmann
parents:
30226
diff
changeset
|
14 |
val empty : 'a queue = AQueue ([], []); |
| 28421 | 15 |
|
| 29798 | 16 |
fun dequeue (AQueue ([], [])) = (NONE, AQueue ([], [])) |
17 |
| dequeue (AQueue (xs, y :: ys)) = (SOME y, AQueue (xs, ys)) |
|
18 |
| dequeue (AQueue (v :: va, [])) = |
|
| 28421 | 19 |
let |
20 |
val y :: ys = rev (v :: va); |
|
21 |
in |
|
| 29798 | 22 |
(SOME y, AQueue ([], ys)) |
| 28421 | 23 |
end; |
24 |
||
| 29798 | 25 |
fun enqueue x (AQueue (xs, ys)) = AQueue (x :: xs, ys); |
| 28421 | 26 |
|
27 |
end; (*struct Example*) |