GNU Info

Info Node: (emacs-lisp-intro.info)rotate-yk-ptr negative arg

(emacs-lisp-intro.info)rotate-yk-ptr negative arg


Prev: rotate-yk-ptr arg Up: yank
Enter node , (file) or (file)node

Passing a negative argument
...........................

   Finally, the question arises, what happens if either the remainder
function, `%', or the `nthcdr' function is passed a negative argument,
as they quite well may?

   The answers can be found by a quick test.  When `(% -1 5)' is
evaluated, a negative number is returned; and if `nthcdr' is called
with a negative number, it returns the same value as if it were called
with a first argument of zero.  This can be seen be evaluating the
following code.

   Here the `=>' points to the result of evaluating the code preceding
it.  This was done by positioning the cursor after the code and typing
`C-x C-e' (`eval-last-sexp') in the usual fashion.  You can do this if
you are reading this in Info inside of GNU Emacs.

     (% -1 5)
          => -1
     
     (setq animals '(cats dogs elephants))
          => (cats dogs elephants)
     
     (nthcdr 1 animals)
          => (dogs elephants)
     
     (nthcdr 0 animals)
          => (cats dogs elephants)
     
     (nthcdr -1 animals)
          => (cats dogs elephants)

   So, if a minus sign or a negative number is passed to `yank', the
`kill-ring-yank-point' is rotated backwards until it reaches the
beginning of the list.  Then it stays there.  Unlike the other case,
when it jumps from the end of the list to the beginning of the list,
making a ring, it stops.  This makes sense.  You often want to get back
to the most recently clipped out piece of text, but you don't usually
want to insert text from as many as thirty kill commands ago.  So you
need to work through the ring to get to the end, but won't cycle around
it inadvertently if you are trying to come back to the beginning.

   Incidentally, any number passed to `yank' with a minus sign
preceding it will be treated as -1.  This is evidently a simplification
for writing the program.  You don't need to jump back towards the
beginning of the kill ring more than one place at a time and doing this
is easier than writing a function to determine the magnitude of the
number that follows the minus sign.


automatically generated by info2www version 1.2.2.9