143 val filter_out: ('a -> bool) -> 'a list -> 'a list |
143 val filter_out: ('a -> bool) -> 'a list -> 'a list |
144 val map_filter: ('a -> 'b option) -> 'a list -> 'b list |
144 val map_filter: ('a -> 'b option) -> 'a list -> 'b list |
145 val equal_lists: ('a * 'b -> bool) -> 'a list * 'b list -> bool |
145 val equal_lists: ('a * 'b -> bool) -> 'a list * 'b list -> bool |
146 val is_prefix: ('a * 'a -> bool) -> 'a list -> 'a list -> bool |
146 val is_prefix: ('a * 'a -> bool) -> 'a list -> 'a list -> bool |
147 val take_prefix: ('a -> bool) -> 'a list -> 'a list * 'a list |
147 val take_prefix: ('a -> bool) -> 'a list -> 'a list * 'a list |
|
148 val chop_prefix: ('a * 'b -> bool) -> 'a list * 'b list -> 'a list * ('a list * 'b list) |
148 val take_suffix: ('a -> bool) -> 'a list -> 'a list * 'a list |
149 val take_suffix: ('a -> bool) -> 'a list -> 'a list * 'a list |
149 val prefixes1: 'a list -> 'a list list |
150 val prefixes1: 'a list -> 'a list list |
150 val prefixes: 'a list -> 'a list list |
151 val prefixes: 'a list -> 'a list list |
151 val suffixes1: 'a list -> 'a list list |
152 val suffixes1: 'a list -> 'a list list |
152 val suffixes: 'a list -> 'a list list |
153 val suffixes: 'a list -> 'a list list |
749 let fun take (rxs, []) = (rev rxs, []) |
750 let fun take (rxs, []) = (rev rxs, []) |
750 | take (rxs, x :: xs) = |
751 | take (rxs, x :: xs) = |
751 if pred x then take(x :: rxs, xs) else (rev rxs, x :: xs) |
752 if pred x then take(x :: rxs, xs) else (rev rxs, x :: xs) |
752 in take([], xs) end; |
753 in take([], xs) end; |
753 |
754 |
|
755 fun chop_prefix eq ([], ys) = ([], ([], ys)) |
|
756 | chop_prefix eq (xs, []) = ([], (xs, [])) |
|
757 | chop_prefix eq (xs as x::xs', ys as y::ys') = |
|
758 if eq (x, y) then |
|
759 let val (ps', xys'') = chop_prefix eq (xs', ys') |
|
760 in (x::ps', xys'') end |
|
761 else ([], (xs, ys)); |
|
762 |
754 (* [x1, ..., xi, ..., xn] ---> ([x1, ..., xi], [x(i+1), ..., xn]) |
763 (* [x1, ..., xi, ..., xn] ---> ([x1, ..., xi], [x(i+1), ..., xn]) |
755 where xi is the last element that does not satisfy the predicate*) |
764 where xi is the last element that does not satisfy the predicate*) |
756 fun take_suffix _ [] = ([], []) |
765 fun take_suffix _ [] = ([], []) |
757 | take_suffix pred (x :: xs) = |
766 | take_suffix pred (x :: xs) = |
758 (case take_suffix pred xs of |
767 (case take_suffix pred xs of |