SYNOPSIS
        mixed  arr[index];
        int    str[index];

        *mixed arr[from .. to];
        string str[from .. to];

BESCHREIBUNG
        Liefert ein Element aus einem Array oder String (erste Form), oder
        eine Teilmenge (zweite Form).

        Die Indizes <index>, <from> und <to> sind durchnummeriert von 0 bis
        strlen(<str>)-1 bzw. sizeof(<arr>)-1. Wenn ein <index> als '<wert'
        geschrieben wird, wird der Wert vom Ende des Stings / Arrays her
        gezaehlt. Dabei wird nummeriert von 1 bis strlen(<str>) bzw.
        sizeof(<arr>). Wird <from> weggelassen, beginnt die Teilmenge mit
        dem ersten Element. Wird <to> weggelassen, endet die Teilmenge mit
        dem letzten Element.

        In der ersten Form muss <index> innerhalb der Grenzen des Strings /
        Arrays sein, sonst wird ein Laufzeitfehler (RTE) verursacht. In der
        zweiten Form werden die Indizes an die Groesse des Strings / Arrays
        angepasst. Wenn <from> groesser ist als <to> oder beide ausserhalb
        der Groesse des Strings / Arrays liegen, wird ein leerer String ""
        bzw. ein leeres Array ({}) zurueck geliefert.

        Die Notation als Closure ist entsprechend:

            [index]      -> ({'#[,      arr, index })
            [<index]     -> ({'#[<,     arr, index })
            [from..to]   -> ({'#[..],   arr, from, to })
            [<from..to]  -> ({'#[<..],  arr, from, to })
            [from..<to]  -> ({'#[..<],  arr, from, to })
            [<from..<to] -> ({'#[<..<], arr, from, to })

BEISPIELE
        foo = ({ 1, 2, 3, 4 });         str = "test";

        foo[1]     -> 1                 str[1] -> 'e' == 101
        foo[1..2]  -> ({ 2, 3 })        str[1..2]  -> "es"
        foo[2..1]  -> ({ })             str[2..1]  -> ""
        foo[0..<2] -> ({ 1, 2 })        str[0..<2]  -> "tes"

        foo[..<2]  -> ({ 1, 2 })        str[..<2]  -> "tes"
        foo[<3..]  -> ({ 2, 3, 4 })     str[<3..]  -> "est"

        foo[1] = 5                      -> foo == ({ 1, 5, 3, 4 })
        foo[1..2] = ({ 5, 6, 7 })       -> foo == ({ 1, 5, 6, 7, 4 })
        foo[1..2] = ({ })               -> foo == ({ 1, 4 })

        str[1] = 'a'                    -> str == "tast"
        str[1..2] = "bar"               -> str == "tbart"
        str[1..2] = ""                  -> str == "tt"

AENDERUNGEN
        slice_array() ist die alte Form der []-Operatoren fuer Arrays,
        extract() ist die alte Form der []-Operatoren fuer Strings.
        BEIDE VARIANTEN SIND VERALTET, WERDEN NICHT MEHR UNTERSTUETZT UND
        SOLLTEN DESHALB NICHT MEHR VERWENDET WERDEN.

        Die Syntax fuer 'rueckwaerts zaehlen vom letzten Element' hat sich von
        Version 3.1.J zu 3.1.K geaendert von '-1' zu '<1'. Auch ist seit dann
        foo[0..-1] ein leeres Array bzw. ein leerer String.

SIEHE AUCH
        member(E), sizeof(E), slice_array(E)
