Rebol Programming/take

USAGE:

edit
TAKE value /part length /last 

DESCRIPTION:

edit

Copies and removes from series. (Modifies)

TAKE is a function value.

ARGUMENTS

edit
  • value -- (Type: series port none)

REFINEMENTS

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

(SPECIAL ATTRIBUTES)

edit
  • catch

SOURCE CODE

edit
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
        ]
    ]
]