今日の頭の体操

「隣り合う二項の差」のお題のdiffのメモ。

/diff {
                          % [3 1 4 1 5 9 2 6 5]
  dup                     % [3 1 4 1 5 9 2 6 5] [3 1 4 1 5 9 2 6 5]
  length                  % [3 1 4 1 5 9 2 6 5] 9
  /n exch def             % [3 1 4 1 5 9 2 6 5] 9 /n -> [3 1 4 1 5 9 2 6 5] /n 9 -> [3 1 4 1 5 9 2 6 5]
  aload pop               % 3 1 4 1 5 9 2 6 5 [3 1 4 1 5 9 2 6 5] -> 3 1 4 1 5 9 2 6 5

  n 1 sub {               % 8回繰り返す
    exch                  %% 3 1 4 1 5 9 2 5 6
    dup                   %% 3 1 4 1 5 9 2 5 6 6
    3 1 roll              %% 3 1 4 1 5 9 2 6 5 6
    sub                   %% 3 1 4 1 5 9 2 6 -1
    n 1 roll              %% -1 3 1 4 1 5 9 2 6
  } repeat
                          % -2 3 -3 4 4 -7 4 -1 3
  pop                     % -2 3 -3 4 4 -7 4 -1

  n 1 sub array astore    % [ -2 3 -3 4 4 -7 4 -1 ]
} def

あ、最初のdup要らないじゃん。。。