equal
deleted
inserted
replaced
211 val divide_and_conquer: ('a -> 'a list * ('b list -> 'b)) -> 'a -> 'b |
211 val divide_and_conquer: ('a -> 'a list * ('b list -> 'b)) -> 'a -> 'b |
212 val divide_and_conquer': ('a -> 'b -> ('a list * ('c list * 'b -> 'c * 'b)) * 'b) -> |
212 val divide_and_conquer': ('a -> 'b -> ('a list * ('c list * 'b -> 'c * 'b)) * 'b) -> |
213 'a -> 'b -> 'c * 'b |
213 'a -> 'b -> 'c * 'b |
214 val partition_eq: ('a * 'a -> bool) -> 'a list -> 'a list list |
214 val partition_eq: ('a * 'a -> bool) -> 'a list -> 'a list list |
215 val partition_list: (int -> 'a -> bool) -> int -> int -> 'a list -> 'a list list |
215 val partition_list: (int -> 'a -> bool) -> int -> int -> 'a list -> 'a list list |
216 val legacy_gensym: string -> string |
|
217 type serial = int |
216 type serial = int |
218 val serial: unit -> serial |
217 val serial: unit -> serial |
219 val serial_string: unit -> string |
218 val serial_string: unit -> string |
220 eqtype stamp |
219 eqtype stamp |
221 val stamp: unit -> stamp |
220 val stamp: unit -> stamp |
1041 let val (xs, xs') = List.partition (fn y => eq (x, y)) ys |
1040 let val (xs, xs') = List.partition (fn y => eq (x, y)) ys |
1042 in (x :: xs) :: part xs' end; |
1041 in (x :: xs) :: part xs' end; |
1043 in part end; |
1042 in part end; |
1044 |
1043 |
1045 |
1044 |
1046 |
|
1047 (* generating identifiers -- often fresh *) |
|
1048 |
|
1049 local |
|
1050 (*Maps 0-61 to A-Z, a-z, 0-9; exclude _ or ' to avoid clash with internal/unusual indentifiers*) |
|
1051 fun gensym_char i = |
|
1052 if i<26 then chr (ord "A" + i) |
|
1053 else if i<52 then chr (ord "a" + i - 26) |
|
1054 else chr (ord "0" + i - 52); |
|
1055 |
|
1056 val char_vec = Vector.tabulate (62, gensym_char); |
|
1057 fun newid n = implode (map (fn i => Vector.sub (char_vec, i)) (radixpand (62, n))); |
|
1058 |
|
1059 val gensym_seed = Unsynchronized.ref (0: int); |
|
1060 |
|
1061 in |
|
1062 fun legacy_gensym pre = |
|
1063 pre ^ newid (NAMED_CRITICAL "legacy_gensym" (fn () => Unsynchronized.inc gensym_seed)); |
|
1064 end; |
|
1065 |
|
1066 |
|
1067 (* serial numbers and abstract stamps *) |
1045 (* serial numbers and abstract stamps *) |
1068 |
1046 |
1069 type serial = int; |
1047 type serial = int; |
1070 val serial = Multithreading.serial; |
1048 val serial = Multithreading.serial; |
1071 val serial_string = string_of_int o serial; |
1049 val serial_string = string_of_int o serial; |