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 |
|
29798
|
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*)
|