Rebol Programming/take

= USAGE: = TAKE value /part length /last

= DESCRIPTION: = Copies and removes from series. (Modifies)

TAKE is a function value. = ARGUMENTS =
 * value -- (Type: series port none)

= REFINEMENTS =
 * /part -- Limits to a given length or position
 * length -- (Type: number series port pair)
 * /last -- Take it from the tail end

= (SPECIAL ATTRIBUTES) =
 * catch

= SOURCE CODE = take: func [ "Copies and removes from series. (Modifies)" [catch] value [series! port! none!] /part "Limits to a given length or position" length [number! series! port! pair!] /last "Take it from the tail end" ][   if value [ either part [ case [ pair? length [ unless image? value [ throw-error 'script 'invalid-part length ]                    last: none ]                any [series? length port? length] [ either same? head value head length [ length: subtract index? length index? value ] [                       throw-error 'script 'invalid-part reduce [length] ]               ]            ]             if last [ length: negate length value: tail value ]            also copy/part value length remove/part value length ] [           also pick either last [ value: back tail value ] [value] 1 remove value ]   ] ]