... war die Idee
UNIQUE zur APL-Grundfunktion zu erheben. Dies war schon im APL2 IUP der Fall. Aber nicht nur dort:
Vor mehr als einem Jahr, mit
Version 6.2, wurde der Sprachumfang von APL-Win um eine Unique-Funktion erweitert. Ich fand das und finde das immer noch nachahmenswürdig.
Beide APL implementieren ein "Unique", die jeweiligen Funktionen unterscheiden sich allerdings in einem wesentlichen Punkt:
Das Ergebnis des APL2 IUP "Unique" ist eine boolesche Maske, mit der das jeweils erste Auftreten der unterschiedlichen Elemente einer APL-Struktur markiert wird. Mit der hiermit definierten Funktion ∩ gilt dann für Vektoren x
(∩x) ≡ (x⍳x)=⍳⍴x
Das Ergebnis des APL+Win "Unique" enthält die verschiedene Elemente eines Vektor jeweils einmal in der Reihenfolge ihres Auftretens im vorgegebenen Vektor, also
(∪x) ≡ ((x⍳x)=⍳⍴x)/x
Definiert man beide Symbole ∩ und ∪ wie oben, dann erhält man
(∪,x) ≡ (∩,x)/,x
Das Argument von ∩ ist eine beliebige APL-Struktur, das von ∪ ist in der APL+Win-Implementierung auf Vektoren beschränkt. Skalare und höherrangige Strukturen führen zu einem LENGTH ERROR bzw. RANK ERROR.
Wäre es vermessen, sich die Umsetzung beider Unique-Varianten zu wünschen? Ich denke nicht, denn J-Anwender haben sie als Nub und Nub Sieve zur Verfügung. Nub entspricht dabei dem APL+Win "Cup", akzeptiert aber beliebige Datenstrukturen als Argument.
Das da noch was gehen kann, zeigt APL+Win. D.Church schieb im März 2005 im APLDN:
"Unique is a pretty easy utility function to write, with two common algorithms depending on whether speed or original order is important to you. Most everyone has at least one of them in their toolbox already."
Ein Jahr später kam "Cup" mit der
Version 6.2.
Ein "Unique" für APL2, wirklich
nur ein Traum?