eintr: search-forward
8.1.3 The ‘search-forward’ Function
-----------------------------------
The ‘search-forward’ function is used to locate the zapped-for-character
in ‘zap-to-char’. If the search is successful, ‘search-forward’ leaves
point immediately after the last character in the target string. (In
‘zap-to-char’, the target string is just one character long.
‘zap-to-char’ uses the function ‘char-to-string’ to ensure that the
computer treats that character as a string.) If the search is
backwards, ‘search-forward’ leaves point just before the first character
in the target. Also, ‘search-forward’ returns ‘t’ for true. (Moving
point is therefore a side effect.)
In ‘zap-to-char’, the ‘search-forward’ function looks like this:
(search-forward (char-to-string char) nil nil arg)
The ‘search-forward’ function takes four arguments:
1. The first argument is the target, what is searched for. This must
be a string, such as ‘"z"’.
As it happens, the argument passed to ‘zap-to-char’ is a single
character. Because of the way computers are built, the Lisp
interpreter may treat a single character as being different from a
string of characters. Inside the computer, a single character has
a different electronic format than a string of one character. (A
single character can often be recorded in the computer using
exactly one byte; but a string may be longer, and the computer
needs to be ready for this.) Since the ‘search-forward’ function
searches for a string, the character that the ‘zap-to-char’
function receives as its argument must be converted inside the
computer from one format to the other; otherwise the
‘search-forward’ function will fail. The ‘char-to-string’ function
is used to make this conversion.
2. The second argument bounds the search; it is specified as a
position in the buffer. In this case, the search can go to the end
of the buffer, so no bound is set and the second argument is ‘nil’.
3. The third argument tells the function what it should do if the
search fails—it can signal an error (and print a message) or it can
return ‘nil’. A ‘nil’ as the third argument causes the function to
signal an error when the search fails.
4. The fourth argument to ‘search-forward’ is the repeat count—how
many occurrences of the string to look for. This argument is
optional and if the function is called without a repeat count, this
argument is passed the value 1. If this argument is negative, the
search goes backwards.
In template form, a ‘search-forward’ expression looks like this:
(search-forward "TARGET-STRING"
LIMIT-OF-SEARCH
WHAT-TO-DO-IF-SEARCH-FAILS
REPEAT-COUNT)
We will look at ‘progn’ next.