| author | haftmann | 
| Mon, 31 May 2010 17:29:28 +0200 | |
| changeset 37211 | 32a6f471f090 | 
| parent 34156 | 3a7937841585 | 
| child 37610 | 1b09880d9734 | 
| permissions | -rw-r--r-- | 
| 34156 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 1 | structure Example : sig | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 2 |   val foldl : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
 | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 3 | val rev : 'a list -> 'a list | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 4 |   val list_case : 'a -> ('b -> 'b list -> 'a) -> 'b list -> 'a
 | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 5 | datatype 'a queue = AQueue of 'a list * 'a list | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 6 | val empty : 'a queue | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 7 | val dequeue : 'a queue -> 'a option * 'a queue | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 8 | val enqueue : 'a -> 'a queue -> 'a queue | 
| 
3a7937841585
Changes in generated code, apparently caused by changes to the code generation system itself.
 paulson parents: 
33707diff
changeset | 9 | end = struct | 
| 28421 | 10 | |
| 11 | fun foldl f a [] = a | |
| 12 | | foldl f a (x :: xs) = foldl f (f a x) xs; | |
| 13 | ||
| 14 | fun rev xs = foldl (fn xsa => fn x => x :: xsa) [] xs; | |
| 15 | ||
| 16 | fun list_case f1 f2 (a :: lista) = f2 a lista | |
| 17 | | list_case f1 f2 [] = f1; | |
| 18 | ||
| 29798 | 19 | datatype 'a queue = AQueue of 'a list * 'a list; | 
| 28421 | 20 | |
| 33707 
68841fb382e0
dropped obsolete documentation; updated generated sources
 haftmann parents: 
30226diff
changeset | 21 | val empty : 'a queue = AQueue ([], []); | 
| 28421 | 22 | |
| 29798 | 23 | fun dequeue (AQueue ([], [])) = (NONE, AQueue ([], [])) | 
| 24 | | dequeue (AQueue (xs, y :: ys)) = (SOME y, AQueue (xs, ys)) | |
| 25 | | dequeue (AQueue (v :: va, [])) = | |
| 28421 | 26 | let | 
| 27 | val y :: ys = rev (v :: va); | |
| 28 | in | |
| 29798 | 29 | (SOME y, AQueue ([], ys)) | 
| 28421 | 30 | end; | 
| 31 | ||
| 29798 | 32 | fun enqueue x (AQueue (xs, ys)) = AQueue (x :: xs, ys); | 
| 28421 | 33 | |
| 34 | end; (*struct Example*) |