\section{Manipulating strings}


\begin{description}
\item[Used files:] stringhax.scm
\item[Name of the package:] strings
\end{description}


\subsection*{Overview}

This module provides several procedures to manipulate strings.

\begin{defundesc}{string-map} {procedure string} {string}
  Does a map on each character of \semvar{string} and returns the
  result, a newly allocated string. \semvar{procedure} takes a
  character and should return a character.
\end{defundesc}

\defun{downcase-string} {string} {string}
\begin{defundescx}{upcase-string} {string} {string}
  Do what you expect: convert \semvar{string} to downcase or upcase
  using char-downcase or char-upcase, respectively. The result is a
  newly allocated string.
\end{defundescx}

\defun{char-set-index} {string char-set \ovar{start}} {number}
\begin{defundescx}{char-set-rindex} {string char-set \ovar{start}} {number}
  Returns the index of the first character that is in
  \semvar{char\=set}.  \ex{char\=set\=index} searches from left to
  right, \ex{char\=set\=rindex} from right to left. \semvar{start} is
  the index from where to start from and defaults to 0 in
  \ex{char\=set\=index} and \ex{(string-length \semvar{string})} in
  \ex{char\=set\=rindex}. If the search fails, \sharpf{} is returned.
\end{defundescx}

\begin{defundesc}{string-reduce} {default construct string} {string}
  Does a ``fold-right'' on \semvar{string}. It applies
  \semvar{construct} on every character of \semvar{string}.
  \semvar{construct} is initially invoked with the last character of
  string and \semvar{default}. In subsequent invocations, the last
  argument is the return value from the previous invocation of
  \semvar{construct} while the first argument is the character of
  \semvar{string} leading the previous used character. So, the string
  is traversed from right to left. The result of the application of
  \semvar{string-reduce} is the result of the last application of
  \semvar{construct}.
  
  Example:
\begin{code}
(string-reduce 
 "" 
 (lambda (char str) 
   (string-append str (string (char-downcase char)))) 
 "DOWNCASE")\end{code}

results to ``downcase''.
\end{defundesc}

\defun{string-prefix?} {prefix string} {boolean}
\begin{defundescx}{string-suffix?} {suffix string} {boolean}
  Return \sharpt{} if \semvar{prefix}/\semvar{suffix} is a real
  \semvar{prefix}/\semvar{suffix} of \semvar{string}, otherwise return
  \sharpf. Real prefix/suffix means that \semvar{string} may not be a
  prefix/suffix of \semvar{prefix}/\semvar{suffix} (in other words:
  \semvar{prefix} and \semvar{suffix} have to be real shorter than
  \semvar{string} to be a real prefix or suffix.
\end{defundescx}

\begin{defundesc}{skip-whitespace} {string} {number}
  Returns the index of the first character in \semvar{string} that is
  not a whitespace (as defined in \ex{char-set:whitespace}). If there
  isn't such a character, \sharpf{} is returned.
\end{defundesc}

\begin{defundesc}{trim-spaces} {string} {string}
  Returns a newly allocated string being \semvar{string} without
  leading or trailing spaces (not whitespaces!).
\end{defundesc}
