def table( filter, &action )
      filter = Node.match( filter, typecode ).new filter unless filter.matched?
      if filter.dimension > dimension
        raise "Filter has #{filter.dimension} dimension(s) but should " +
              "not have more than #{dimension}"
      end
      filter = Hornetseye::lazy( 1 ) { filter } while filter.dimension < dimension
      if filter.dimension == 0
        action.call self, filter
      else
        Hornetseye::lazy { |i,j| self[j].table filter[i], &action }
      end
    end
def table( filter, &action )
      filter = Node.match( filter, typecode ).new filter unless filter.matched?
      if filter.dimension > dimension
        raise "Filter has #{filter.dimension} dimension(s) but should " +
              "not have more than #{dimension}"
      end
      filter = Hornetseye::lazy( 1 ) { filter } while filter.dimension < dimension
      if filter.dimension == 0
        action.call self, filter
      else
        Hornetseye::lazy { |i,j| self[j].table filter[i], &action }
      end
    end
Compute table from two arrays

 Used internally to implement convolutions and other operations.

 @param [Node] filter Filter to form table with.
 @param [Proc] action Operation to make table for.

 @return [Node] Result of operation.

 @see #convolve

 @private