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


リスト 練習問題 7 解答「もうひとつの三角リスト」

ひとつの解法をここに示します。 最初に前の問題の三角リストを計算し、 1 - をタイプして全ての要素から1を引きます。

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

    1 -

欲しいリストの左端の数値群は"三角数"(意味判るでしょう!)と呼ばれます。 n次の三角数は、1 から n までの整数の合計であって、 これは公式 n * (n+1) / 2 によって直接計算できます。

2:  [ [0], [0, 1], ... ]    2:  [ [0], [0, 1], ... ]
1:  [0, 1, 2, 3, 4, 5]      1:  [0, 1, 3, 6, 10, 15]
    .                           .

    v x 6 RET 1 -               V M ' $ ($+1)/2 RET

このリストを、上記の「リストのリスト」に加えると欲しい結果が得られます。

1:  [ [0],
      [1, 2],
      [3, 4, 5],
      [6, 7, 8, 9],
      [10, 11, 12, 13, 14],
      [15, 16, 17, 18, 19, 20] ]
      .

      V M +

三角数を得る公式を知らなかった場合は、 V U + を使って計算することもできました。 また、 元の三角リストにまとめ作用をマッピングするという、 機械的な方法もあります。

2:  [ [0], [0, 1], ... ]    2:  [ [0], [0, 1], ... ]
1:  [ [0], [0, 1], ... ]    1:  [0, 1, 3, 6, 10, 15]
    .                           .

    RET                         V M V R +

(これは、「V R + コマンドをベクトル全体にマッピングせよ」という意味で、 かつ主ベクトルの各要素がそれ自体で小ベクトルなので、 V R + は小ベクトルの中の要素を合計します。)


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