Скажем, у меня есть список из 3 символов:
l:`s1`s2`s3
Что такое q-способ создания следующего списка n * (n + 1) / 2 перестановок?
(`s1;`s1),(`s1;`s2),(`s1;`s3),(`s2;`s2),(`s2;`s3),(`s3;`s3)
Это можно увидеть как в контексте корреляционной матрицы, где я хочу, чтобы вся верхняя три angular часть корреляционной матрицы, включая диагональ.
Конечно, размер моего начального списка будет превышает 3, поэтому я хотел бы, чтобы универсальная c функция выполняла эту операцию.
Я знаю, как генерировать диагональные элементы:
q) {(x,y)}'[l;l]
(`s1`s1;`s2`s2;`s3`s3)
Но я не знаю, как генерировать недиагональные элементы.