Um aus einer Liste beliebiger Elemente alle unterschiedlichen zu ermitteln gibt es seit APL-Gedenken das Unique-Idiom: VauiotaVauistgleichiotarhovaucompressvau (ohne explizite Nennung der Klammern). Seit APL2 können damit auch z.B. aus einer Liste von Namen der jeweils zuerst auftretende extrahiert werden.
Nun gibt es zu diesem Idiom mindestens eine Alternative: Sortiere alle Elemente des Vektors, untersuche paarweise jeweils aufeinanderfolgende Elemente auf Ungleichheit und reduzierte mit dem Ergebnis die ursprüngliche Liste. Angewandt auf Listen von Zeichenkette hielt ich diese Schreibweise in Sachen Performance für konkurrenzfähig zu UNIQUE - allerdings nur auf dem PC.
Denn auf dem Mainframe wird UNIQUE als Idiom erkannt und als Ganzes ausgeführt. Klar, dass dies deutliche Vorteile gegenüber Alternativen ergibt, dafür gibt es die Idiomerkennung schließlich.
Soweit ich weiß, gibt es sie nicht auf der Workstation Plattform. Also habe ich mal UNIQUE gegen die beschriebene Alternative gemessen und war überrascht:
UNIQUE2 43.3% (Faktor 1: fast keine Wiederholungen)
UNIQUE2 29.8% (Faktor 10: durchschnittlich 10 Wiederholungen)
UNIQUE2 20.9% (Faktor 100: durchschnittlich 100 Wiederholungen)
∆UNIQUE 1.5% (Faktor 1: fast keine Wiederholungen)
∆UNIQUE 1.5% (Faktor 10: durchschnittlich 10 Wiederholungen)
∆UNIQUE 0% (Faktor 100: durchschnittlich 100 Wiederholungen)
Das ist eindeutig! Messungen mit längeren Vektoren ergeben ein noch deutlicheres Bild. Das sieht verdächtig nach Idiomerkennung aus.
Mal sehen, wie der Vergleich auf einem IBM Mainframe ausgeht.
... mir etwas von IBM zu Weihnachten hätte wünschen dürfen (mit ernsthafter Aussicht auf Erfüllung), hätte ich sicher "Unique" als APL2-Grundfunktion auf dem Wunschzettel notiert. Ich bin der festen Überzeugung, dass das gleichnamige Idiom ein eigen
Aufgenommen: Jan 03, 14:07