# HG changeset patch # User wenzelm # Date 920977636 -3600 # Node ID d361b0a99e311e2f9a1eb793b3856f2a01723b5d # Parent 15652e058e28b8db28ee0c9693c522d5528c43fd added nth_elem_string, exists_string; diff -r 15652e058e28 -r d361b0a99e31 src/Pure/library.ML --- a/src/Pure/library.ML Tue Mar 09 12:06:09 1999 +0100 +++ b/src/Pure/library.ML Tue Mar 09 12:07:16 1999 +0100 @@ -122,7 +122,9 @@ val string_of_indexname: string * int -> string (*strings*) + val nth_elem_string: int * string -> string val foldl_string: ('a * string -> 'a) -> 'a * string -> 'a + val exists_string: (string -> bool) -> string -> bool val enclose: string -> string -> string -> string val quote: string -> string val space_implode: string -> string list -> string @@ -653,13 +655,19 @@ (** strings **) -(*tuned version of foldl for strings, avoids explode*) +(*functions tuned for strings, avoiding explode*) + +fun nth_elem_string (i, str) = + String.substring (str, i, 1) handle _ => raise LIST "nth_elem_string"; + fun foldl_string f (x0, str) = let val n = size str; fun fold (x, i) = if i < n then fold (f (x, String.substring (str, i, 1)), i + 1) else x in fold (x0, 0) end; +fun exists_string pred str = foldl_string (fn (b, s) => b orelse pred s) (false, str); + (*enclose in brackets*) fun enclose lpar rpar str = lpar ^ str ^ rpar;