Go to the first, previous, next, last section, table of contents.


リスト 練習問題 9 解答「整数演算の機械的処理」

まずは整数をベクトル表記に変換します。

1:  25129925999           3:  25129925999
    .                     2:  10
                          1:  [11, 10, 9, ..., 1, 0]
                              .

    25129925999 RET           10 RET 12 RET v x 12 RET -

1:  25129925999              1:  [0, 2, 25, 251, 2512, ... ]
2:  [100000000000, ... ]         .
    .

    V M ^   s 1                  V M \

(思い出してください。\ コマンドは整数商を計算します。)

1:  [0, 2, 5, 1, 2, 9, 9, 2, 5, 9, 9, 9]
    .

    10 V M %   s 2

次にこの数をインクリメントしなければなりません。 これは最下位桁に 1 を加えて、かつ繰上り処理を伴います。 ある桁が 9 で、かつその右の全ての桁が 9 ならその桁より左に 繰上りが発生します。

1:  [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1]   1:  [1, 1, 1, 0, 0, 1, ... ]
    .                                          .

    9 V M a =                                  v v

1:  [1, 1, 1, 0, 0, 0, ... ]   1:  [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
    .                              .

    V U *                          v v 1 |

1 と 0 のベクトルに * を蓄積作用させると、1 の最初の連続だけが残ります。
(訳注: 蓄積作用は左から右に作用するので、 この前後にリスト反転 v v を入れている。)
最右桁を除き、1 が残った桁全てに繰上りが発生します。 右端に 1 を連結するのは、 繰上りフラグ 1 を繰上り先の桁に位置させ、右端に1を加える処理のためです。

2:  [0, 0, 0, 0, ... ]     1:  [0, 0, 2, 5, 1, 2, 9, 9, 2, 6, 0, 0, 0]
1:  [0, 0, 2, 5, ... ]         .
    .

    0 r 2 |                    V M +  10 V M %

ここで、元の数の に 0 を連結しました。 これは、繰上りが発生した桁から 1 桁繰上ることを見越しての操作です。

最後に、このリストを整数に変換します。

3:  [0, 0, 2, 5, ... ]        2:  [0, 0, 2, 5, ... ]
2:  1000000000000             1:  [1000000000000, 100000000000, ... ]
1:  [100000000000, ... ]          .
    .

    10 RET 12 ^  r 1              |

1:  [0, 0, 20000000000, 5000000000, ... ]    1:  25129926000
    .                                            .

    V M *                                        V R +

最終ステップの別の方法としては、 `10 $$ + $' を桁ベクトルにまとめ作用させる方法があります。

1:  [0, 0, 2, 5, ... ]        1:  25129926000
    .                             .

                                  V R ' 10 $$ + $ RET


Go to the first, previous, next, last section, table of contents.     利用度数