Ja, ich weiß:
Ich treibe mit dieser Operation mehr als doppelt soviel Aufwand wie nötig.
Denn es ist S[i;;]=S[j;;] genau dann,wenn S[j;;]=S[i;;]. Und die Information, dass jede Spalte mit sich selbst identisch ist, ist auch nichts Neues. Die gewünschte Information steht also bereits oberhalb der Diagonalen der 9x9-Ergebnismatrix. Ist UTM0 die obere 9x9-Dreiecksmatrix ohne Diagolale, also
0 1 1 1 . . . 1
0 0 1 1 . . . 1
0 0 0 1 . . . 1
....
0 0 0 0 0 0 1
0 0 0 0 0 0 0
so enthält
UTM0^^⌿¨(⊂[2 3]S)∘.=(⊂[2 3]S)
bereits die gewünschten Informationen. Also mehr als 50% Luftoperationen!
Also warum die Vergleiche nicht nur für Indexpaare i,j mit i<j durchführen?
Bequemlichkeit, reine Bequemlichkeit!
Der "teure" Ausdruck lässt sich schnell in einer Zeile hinschreiben. Die "ökonomische" Lösung braucht da schon mehr Tastaturanschläge. Das wäre die Sache auch wert, wenn dabei Zählbares heraus käme.
Doch die Kosten des obige Ausdruck - mit oder ohne die Multiplikation mit UTM0 - liegen im Sub-Millisekundenbereich, also nicht messbar mit TIME. Erst 10 sukzessive Ausführungen des Ausdrucks können eine Messung von etwas mehr als einer Millisekunde bringen. So häufig brauche ich aber die Vergleiche in der Regel nicht.
Warum soll ich dann mühevoll komplizierte Algorithmen in den Computer tippen, wenn der Computer für die kurze Schreibweise kaum länger braucht. Meine Zeit gegen die Zeit meines Rechners! Da fällt mir die Entscheidung - egoistisch wie ich bin - leicht.
APL kann ja so schnell sein.