function sliceFrom( x, start, strict, writable ) {
	var args;
	var sh;
	var s;
	var i;

	sh = getShape( x );
	args = [];
	for ( i = 0; i < start.length; i++ ) {
		s = start[ i ];
		if ( isNumber( s ) && s !== 0 ) { // note: a start value equal to 0 is equivalent to `null` (i.e., including all elements along a dimension)
			if ( s === sh[ i ] ) {
				// When a starting index is one more than the last index along a dimension, create a slice for returning an empty array...
				s -= 1;
				args.push( new Slice( s, s ) );
			} else {
				args.push( new Slice( s, null ) );
			}
		} else {
			args.push( null );
		}
	}
	return slice( x, args2multislice( args ), strict, writable );
}
Returns a shifted view of an input ndarray.

@param {ndarray} x - input array
@param {Array<null|void|integer>} start - starting indices (inclusive)
@param {boolean} strict - boolean indicating whether to enforce strict bounds checking
@param {boolean} writable - boolean indicating whether a returned array should be writable
@throws {RangeError} number of slice dimensions must match the number of array dimensions
@throws {RangeError} slice exceeds array bounds
@returns {ndarray} ndarray view

@example
var ndarray = require( '@stdlib/ndarray/ctor' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );

var buffer = [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ];
var shape = [ 3, 2 ];
var strides = [ 2, 1 ];
var offset = 0;

var x = ndarray( 'generic', buffer, shape, strides, offset, 'row-major' );
// returns <ndarray>

var sh = x.shape;
// returns [ 3, 2 ]

var arr = ndarray2array( x );
// returns [ [ 1.0, 2.0 ], [ 3.0, 4.0 ], [ 5.0, 6.0 ] ]

var s = [ 1, null ];
var y = sliceFrom( x, s, false, false );
// returns <ndarray>

sh = y.shape;
// returns [ 2, 2 ]

arr = ndarray2array( y );
// returns [ [ 3.0, 4.0 ], [ 5.0, 6.0 ] ]