>>  <<  Ркв  Ввд  JfC  LJ  Фрз  Слв  Изм  Рзг  !:  Помощь  Словарь

Построить Множество ~.  _  

~.y выбирает множество элементов y , тоесть все его уникальные элементы. Например:
   y=: 3 3 $ 'ABCABCDEF'
   y;(~.y);(~.3);($~.3)
+---+---+-+-+
|ABC|ABC|3|1|
|ABC|DEF| | |
|DEF|   | | |
+---+---+-+-+
   

Точнее, множество вычисляется, выбирая первый элемент, вычеркивая из аргумента все приближенно (т.е. с погрешностью) равные ему, выбирая первый элемент из оставшихся, и т.д. Погрешность сравнения можно настроить (!.).

Если f требует значительных ресурсов для вычисления, определить f y можно, вычислив сначала f~. y (что дает все возможные значения функции), а затем, распределяя полученные значения по их окончательным позициям. Для осуществления последнего, достаточно умножить полученный вектор всех возможных значений на матрицу, производимую глаголом Найти В Себе ( = ). Например:
   f=: *:
   f y=: 2 7 1 8 2 8 1 8
4 49 1 64 4 64 1 64

   ,.&.>(~. ; f@~. ; = ; (f@~.(+/ .*)=) ; f)y
+-+--+---------------+--+--+
|2| 4|1 0 0 0 1 0 0 0| 4| 4|
|7|49|0 1 0 0 0 0 0 0|49|49|
|1| 1|0 0 1 0 0 0 1 0| 1| 1|
|8|64|0 0 0 1 0 1 0 1|64|64|
| |  |               | 4| 4|
| |  |               |64|64|
| |  |               | 1| 1|
| |  |               |64|64|
+-+--+---------------+--+--+

   NUB=: 1 : 'x@~. +/ . * ='            Наречие
   *: NUB y
4 49 1 64 4 64 1 64

   nubindex=: ~. i. ]
   (nubindex ; (nubindex { ~.)) y
+---------------+---------------+
|0 1 2 3 0 3 2 3|2 7 1 8 2 8 1 8|
+---------------+---------------+



>>  <<  Ркв  Ввд  JfC  LJ  Фрз  Слв  Изм  Рзг  !:  Помощь  Словарь