Node:Dec Example parts, Next:Dec Example altogether, Previous:Decrementing Example, Up:Decrementing Loop
We start with three variables: the total number of rows in the
triangle; the number of pebbles in a row; and the total number of
pebbles, which is what we want to calculate. These variables can be
named number-of-rows
, number-of-pebbles-in-row
, and
total
, respectively.
Both total
and number-of-pebbles-in-row
are used only
inside the function and are declared with let
. The initial
value of total
should, of course, be zero. However, the
initial value of number-of-pebbles-in-row
should be equal to
the number of rows in the triangle, since the addition will start with
the longest row.
This means that the beginning of the let
expression will look
like this:
(let ((total 0) (number-of-pebbles-in-row number-of-rows)) body...)
The total number of pebbles can be found by repeatedly adding the number of pebbles in a row to the total already found, that is, by repeatedly evaluating the following expression:
(setq total (+ total number-of-pebbles-in-row))
After the number-of-pebbles-in-row
is added to the total
,
the number-of-pebbles-in-row
should be decremented by one, since
the next time the loop repeats, the preceding row will be
added to the total.
The number of pebbles in a preceding row is one less than the number of
pebbles in a row, so the built-in Emacs Lisp function 1-
can be
used to compute the number of pebbles in the preceding row. This can be
done with the following expression:
(setq number-of-pebbles-in-row (1- number-of-pebbles-in-row))
Finally, we know that the while
loop should stop making repeated
additions when there are no pebbles in a row. So the test for
the while
loop is simply:
(while (> number-of-pebbles-in-row 0)