Go to the previous, next section.

The parts of the function definition

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@dots{})

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)

Go to the previous, next section.