def slice( start, length )
      unless start.matched? or length.matched?
        if start < 0 or start + length > shape.last
          raise "Range must be in 0 ... #{shape.last} " +
                "(was #{start} ... #{start + length})"
        end
      end
      start = INT.new start unless start.matched?
      length = INT.new length unless length.matched?
      index = Variable.new Hornetseye::INDEX( length )
      Lambda.new( index, @term.subst( @index => index ).
                         skip( index, start ) ).unroll
    end
def slice( start, length )
      unless start.matched? or length.matched?
        if start < 0 or start + length > shape.last
          raise "Range must be in 0 ... #{shape.last} " +
                "(was #{start} ... #{start + length})"
        end
      end
      start = INT.new start unless start.matched?
      length = INT.new length unless length.matched?
      index = Variable.new Hornetseye::INDEX( length )
      Lambda.new( index, @term.subst( @index => index ).
                         skip( index, start ) ).unroll
    end
Extract array view with part of array

 @param [Integer,Node] start Number of elements to skip.
 @param [Integer,Node] length Size of array view.

 @return [Node] Array view with the specified elements.

 @private