Vektor
Vergleichbar mit geordneten Collections (Arrays/Listen) in anderen Sprachen (C++, JavaScript, Scala, Factor) kann ein Teil des Stacks als zusammengehörig markiert und damit als eine Einheit aufgefasst werden. Mit und werden die zwischen diesen Markern liegende Werte zu einem Vektor zusammengefasst.
Dies kann bspw. dazu genutzt werden, InstantView®-Anweisungen eine variable Anzahl an Parametern zu übergeben.
Vektoren in InstantView® können Elemente unterschiedlichen Typs enthalten. Ein Beispiel eines Vektors:
[ "Hallo" 1 5m NULL ]
Vektoren existieren auf dem Stack in zwei verschiedenen Zuständen:
- als eine Folge von Einträgen, die mit beginnt und mit endet
- als ein Eintrag, der den gesamten Vektor enthält (ohne und ). Eine Variable enthält einen Vektor immer in dieser Form.
InstantView® benutzt intern verschiedene Repräsentationen für Vektoren, angepasst an die enthaltenen Elemente.
Zwischen diesen Zuständen kann mithilfe des Operators # gewechselt werden.
Operationen mit Vektoren werden durch folgende Anweisungen unterstützt:
-> var | Zuweisung zu einer Variablen |
# | e1, ...en in einen Stackeintrag zusammenfassen (shrink) bzw. die umgekehrte Operation (explode) |
| | Vektoren zusammenfügen, ein Element zu einem Vektor hinzufügen (addieren), Ergebnis ist ein neuer Vektor |
- | Vektorelement aus einem Vektor entfernen, Ergebnis ist ein neuer Vektor |
= | zwei Vektoren miteinander vergleichen |
Insert | ein Element einem Vektor hinzufügen |
GetElement | das k-te Element eines Vektors erhalten |
Revert | Reihenfolge der Elemente eines Vektors umkehren |
GetVector | Vektor konstruieren (aus den Elementen einer Collection, ...) |
CreateVector(n) | leeren Vektor erzeugen (für n Elemente prä-allokiert) |
StringVector | Aus einer Zeichenkette einen Vektor erzeugen |
Anweisungen, die Vektoren als Eingabeparameter akzeptieren sind:
SetFormat, SetSort, FillObox, UpdateObox, RemoveObox, SetSelection, PutLine, Insert, Remove, GetObject . . .
Mit Anweisung iterate kann über die Elemente eines Vektor iteriert werden.