Next: , Previous: , Up: Answers to Exercises   [Contents][Index]

2.7.68 Programming Tutorial Exercise 11

First we define a dummy program to go on the z s key. The true z s key is supposed to take two numbers from the stack and return one number, so DEL as a dummy definition will make sure the stack comes out right.

2:  4          1:  4                         2:  4
1:  2              .                         1:  2
    .                                            .

  4 RET 2       C-x ( DEL C-x )  Z K s RET       2

The last step replaces the 2 that was eaten during the creation of the dummy z s command. Now we move on to the real definition. The recurrence needs to be rewritten slightly, to the form ‘s(n,m) = s(n-1,m-1) - (n-1) s(n-1,m)’.

(Because this definition is long, it will be repeated in concise form below. You can use C-x * m to load it from there.)

2:  4        4:  4       3:  4       2:  4
1:  2        3:  2       2:  2       1:  2
    .        2:  4       1:  0           .
             1:  2           .
                 .

  C-x (       M-2 RET        a =         Z [  DEL DEL 1  Z :

4:  4       2:  4                     2:  3      4:  3    4:  3    3:  3
3:  2       1:  2                     1:  2      3:  2    3:  2    2:  2
2:  2           .                         .      2:  3    2:  3    1:  3
1:  0                                            1:  2    1:  1        .
    .                                                .        .

  RET 0   a = Z [  DEL DEL 0  Z :  TAB 1 - TAB   M-2 RET     1 -      z s

(Note that the value 3 that our dummy z s produces is not correct; it is merely a placeholder that will do just as well for now.)

3:  3               4:  3           3:  3       2:  3      1:  -6
2:  3               3:  3           2:  3       1:  9          .
1:  2               2:  3           1:  3           .
    .               1:  2               .
                        .

 M-TAB M-TAB     TAB RET M-TAB         z s          *          -

1:  -6                          2:  4          1:  11      2:  11
    .                           1:  2              .       1:  11
                                    .                          .

  Z ] Z ] C-x )   Z K s RET      DEL 4 RET 2       z s      M-RET k s

Even though the result that we got during the definition was highly bogus, once the definition is complete the z s command gets the right answers.

Here’s the full program once again:

C-x (  M-2 RET a =
       Z [  DEL DEL 1
       Z :  RET 0 a =
            Z [  DEL DEL 0
            Z :  TAB 1 - TAB M-2 RET 1 - z s
                 M-TAB M-TAB TAB RET M-TAB z s * -
            Z ]
       Z ]
C-x )

You can read this definition using C-x * m (read-kbd-macro) followed by Z K s, without having to make a dummy definition first, because read-kbd-macro doesn’t need to execute the definition as it reads it in. For this reason, C-x * m is often the easiest way to create recursive programs in Calc.

Next: Programming Tutorial Exercise 12, Previous: Programming Tutorial Exercise 10, Up: Answers to Exercises   [Contents][Index]