From: Shin-ichro Hara Date: 1998-10-28T01:45:47+09:00 Subject: [ruby-list:10395] Re: array 原です。 In message "[ruby-list:10330] Re: array" on 98/10/26, Inaba Hiroto writes: |def Array.tensor(sizes, index = [], &block) | isize = index.size | if sizes.size == isize | ret = block.call(*index) | else | i = -1 | ret = new(sizes[isize]).filter{ | index[isize] = i += 1 | tensor(sizes, index, &block) | } | index.pop | end | ret |end 本質的にこれ以上のものはないですが、駄目押しに短く書いてみました。 def tensor(n = nil, *sizes) return yield unless n (0..n-1).collect { |i| tensor(*sizes) { |*x| yield(i, *x) } } end ちょっと仕様が変わって Array.tensor([2,3,4]) ではなく tensor(2,3,4) と使います。