equal
deleted
inserted
replaced
28 val --| : ('a -> 'b * 'c) * ('c -> 'd * 'e) -> 'a -> 'b * 'e |
28 val --| : ('a -> 'b * 'c) * ('c -> 'd * 'e) -> 'a -> 'b * 'e |
29 (*concatenation*) |
29 (*concatenation*) |
30 val ^^ : ('a -> string * 'b) * ('b -> string * 'c) -> 'a -> string * 'c |
30 val ^^ : ('a -> string * 'b) * ('b -> string * 'c) -> 'a -> string * 'c |
31 (*one element literal*) |
31 (*one element literal*) |
32 val $$ : ''a -> ''a list -> ''a * ''a list |
32 val $$ : ''a -> ''a list -> ''a * ''a list |
|
33 (*literal list*) |
|
34 val list: ''a list -> ''a list -> ''a list * ''a list |
33 end; |
35 end; |
34 |
36 |
35 signature SCAN = |
37 signature SCAN = |
36 sig |
38 sig |
37 include BASIC_SCAN |
39 include BASIC_SCAN |
147 |
149 |
148 fun $$ _ [] = raise MORE None |
150 fun $$ _ [] = raise MORE None |
149 | $$ a (x :: xs) = |
151 | $$ a (x :: xs) = |
150 if a = x then (x, xs) else raise FAIL None; |
152 if a = x then (x, xs) else raise FAIL None; |
151 |
153 |
|
154 fun list ys xs = |
|
155 let |
|
156 fun drop_prefix [] xs = xs |
|
157 | drop_prefix (_ :: _) [] = raise MORE None |
|
158 | drop_prefix (y :: ys) (x :: xs) = |
|
159 if y = x then drop_prefix ys xs else raise FAIL None; |
|
160 in (ys, drop_prefix ys xs) end; |
|
161 |
152 fun any _ [] = raise MORE None |
162 fun any _ [] = raise MORE None |
153 | any pred (lst as x :: xs) = |
163 | any pred (lst as x :: xs) = |
154 if pred x then apfst (cons x) (any pred xs) |
164 if pred x then apfst (cons x) (any pred xs) |
155 else ([], lst); |
165 else ([], lst); |
156 |
166 |