Rebol Programming/array

= USAGE: = ARRAY size /initial value

= DESCRIPTION: = Makes and initializes a series of a given size.

ARRAY is a function value. = ARGUMENTS =
 * size -- Size or block of sizes for each dimension (Type: integer block)

= REFINEMENTS =
 * /initial -- Specify an initial value for all elements
 * value -- Initial value (will be called each time if a function) (Type: any)

= (SPECIAL ATTRIBUTES) =
 * catch

= SOURCE CODE = array: func [ "Makes and initializes a series of a given size." [catch] size [integer! block!] "Size or block of sizes for each dimension" /initial "Specify an initial value for all elements" value {Initial value (will be called each time if a function)} /local block rest ][   if block? size [ if tail? rest: next size [rest: none] unless integer? set/any 'size pick size 1 [ throw-error 'script 'expect-arg reduce ['array 'size type? get/any 'size] ]   ]     block: make block! size case [ block? rest [ loop size [block: insert/only block array/initial rest :value] ]        series? :value [ loop size [block: insert/only block copy/deep value] ]        any-function? :value [ loop size [block: insert/only block value] ]        insert/dup block value size ]    head block ]