(再帰なので)まずダミーのプログラムを定義して z s キーに割付けます。 本当の z s の動作は、 スタックから値を 2個取って 1個返すことになっていますから、 ダミー定義に DEL を使ってスタックが正しく出るようにしておきましょう。
2: 4 1: 4 2: 4
1: 2 . 1: 2
. .
4 RET 2 C-x ( DEL C-x ) Z K s RET 2
最後の 2 は、ダミーの z s コマンドを定義するうちに失われた
2 を置きなおしています。
さて、本当の定義に取りかかりましょう。
漸化式は次のように少し書きなおす必要があります。
s(n,m) = s(n-1,m-1) - (n-1) s(n-1,m)
(この定義は長いので、最後にまとめたものを付けておきます。 学習者はそれを M-# m で読込むことができます。)
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
(ダミーの z s が返した値 3 は正しくないので注意してください。 今は単なる場所取りでかまいません。)
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 * -
(ESC TAB ESC TAB) (ESC TAB)
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
たとえ定義中に得られた答がひどいインチキでも、 ひとたび定義が完成すれば z s コマンドは正しい答を得るようになります。
プログラム全体をここにもう一度まとめます。
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 )
この定義を M-# m (read-kbd-macro) を使って読込み、
そのあと Z K s とすることで、事前のダミーなしに定義することができます。
なぜなら read-kbd-macro は読込んだ定義を実行することなく覚えるからです。
この点で、
しばしば M-# m は Calc において再帰的プログラムを作る最も簡単な方法です。
Go to the first, previous, next, last section, table of contents.
利用度数