From: Shin-ichro Hara Date: 1998-10-25T19:41:35+09:00 Subject: [ruby-list:10329] Re: array 原です。 |def Array.tensor(sizes, data=[], i = nil) | if size = sizes[0] | array = new(size) | data[-1][i] = array if i | data += [array] | array.each_index { |i| | tensor(sizes[1..-1], data, i) {|*x| yield(i, *x)} | } | else | data[-1][i] = yield if i | return | end | data[0] |end 若干冗長だったので、改良版: def Array.tensor(sizes, data=[], i = nil) if size = sizes[0] if i data[i] = (array = new(size)) else data.push (array = new(size)) end array.each_index { |i| tensor(sizes[1..-1], array, i) {|*x| yield(i, *x)} } else if i data[i] = yield else data.push yield end end data[0] end もうひと工夫できるかな。