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

Символ s:  _ _ _ Символ

Символы — тип данных, производимый глаголом s: . Поиск, сортировка и сравнение символов гораздо быстрее соответствующих операций с обычными упакованными строками. Cтруктурные, поисковые и устанавливающие отношение глаголы работают и с символами. Арифметические глаголы с символами не работают.

Монада s: производит массив символов. Допустимы несколько типов аргументов:
  • строка, в которой первый символ служит разделителем
  • текстовый массив, в котором каждая строка, исключая пробелы в конце, представляет собой имя символа
  • упаковочный массив строк
s:^:_1, обратный к s:, есть 5&s: .

Диада s: принимает скалярный целый левый аргумент и вычисляет множество различных функций:

Левый   Правый     Функция
 0 0 мощность (cardinality) множества символов
 0 1 длина строки (количество букв, занятых в массиве строк)
 0 2 таблица символов; столбцы соответствуют:
 0индекс в таблице строк
 1длина в байтах
 2значение хеш-функции
 3цвет
 4родитель
 5левый
 6правый
 7порядковый #
 8предыдущий
 9следующий
 10 флажки
Детали этих данных могут меняться от одной версии J к другой.
 0 3 таблица строк
 0 4 хеш-таблица. _1 соответствует свободным элементам; неотрицательные значения — индексы в таблицу символов.
 0 5 корень дерева двоичного поиска
 0 6 коэффициент заполнения дерева двоичного поиска
 0 7 промежуток дерева двоичного поиска
 0 10 установить глобальные данные о символах, эквивалентно 0 s:&.>i.8. (детали этих данных могут измениться в будущем).
 0 11 провести контроль целостности глобальных данных о символах
 0 12 количество запросов для нахождения каждого символа
 1 массив символов строка имен символов, предшествуя каждое знаком '`'
_1 строка список символов для строки, содержащей имена символов, каждое, с префиксом из первого символа строки
 2 массив символов строка имен символов, каждое имя заканчивается нулем (null-terminated)
_2 строка список символов для строки, содержащей имена символов, каждое из которых имеет суффикс из последнего символа строки
 3 массив символов текстовый массив имен символов, выровненных нулем (ASCII код = 0)
_3 текстовый массив массив символов для текстового массива, где каждая строка есть имя символа, исключая нули (ASCII код = 0) в конце
 4 массив символов текстовый массив имен символов, выровненных пробелами
_4 текстовый массив массив символов для текстового массива, каждая строка которого содержит (исключая пробелы в конце) имя символа
 5 массив символов массив имен символов в виде массива упакованных строк
_5 упакованые строки массив символов для массива упакованных строк, каждая из которых представляет собой имя символа
 6 массив символов массив целых индексов символов (индексы в таблицу символов)
_6 индексы символы по индексам
 7 массив символов масив целых порядковых номеров символов
10 глобальные данные символов установить глобальные данные символов (в форме, возвращенной 0 s: 10) после проверки ее целостности. Испорченные данные могут вызвать неправильную интерпретацию массивов символов, потерю данных, сбой в системе, или конец известной нам цивилизации.

Обратный к k&s: глагол есть (-k)&s:, для ненулевых целых k между _6 и 6 .
 

Остаток этого текста разбит на следующие разделы: Отображение, Комментированные примеры, Память и процессорное время, and Длительное хранение.

Отображение

Символы отображаются в виде ` (96{a.) , присоединенного к началу имени символа; отображение массивов символов подобно отображению числовых массивов, за исключением того, что столбцы выравниваются влево. См. Комментированные примеры ниже.

Комментированные примеры
   ] t=: s: ' zero one two three four five'
`zero `one `two `three `four `five

   $ t                              NB. список 6-ти символов
6
   3 5 $ t                          NB. матрица символов
`zero `one  `two  `three `four 
`five `zero `one  `two   `three
`four `five `zero `one   `two  

   1 3 5 3 1 { t
`one `three `five `three `one
   |. t
`five `four `three `two `one `zero
   _2 |. t
`four `five `zero `one `two `three
   1 0 2 0 4 0 # t
`zero `two `two `four `four `four `four

   <"0 t                            NB. символы могут быть упакованы
+-----+----+----+------+-----+-----+
|`zero|`one|`two|`three|`four|`five|
+-----+----+----+------+-----+-----+
   (2|i.#t) </. t
+----------------+-----------------+
|`zero `two `four|`one `three `five|
+----------------+-----------------+

   <:/~ t                           NB. отношения работают для символов
1 0 0 0 0 0
1 1 1 1 0 0
1 0 1 0 0 0
1 0 1 1 0 0
1 1 1 1 1 0
1 1 1 1 1 1

   t + t                            NB. арифметические функции не работают
|domain error
|   t    +t

   /: t                             NB. символы могут быть упорядочены
5 4 1 3 2 0

   5 s: t                           NB. преобр. символы в упакованные строки
+----+---+---+-----+----+----+
|zero|one|two|three|four|five|
+----+---+---+-----+----+----+
   (/: t) -: /: 5 s: t
1

   /:~ t
`five `four `one `three `two `zero

   <:/~ /:~ t
1 1 1 1 1 1
0 1 1 1 1 1
0 0 1 1 1 1
0 0 0 1 1 1
0 0 0 0 1 1
0 0 0 0 0 1

   t i.  s: ' three one four one five nine'
3 1 4 1 5 6
   t e.~ s: ' three one four one five nine'
1 1 1 1 1 0

   10{. t                           NB. заполнитель есть символ нулевой длины
`zero `one `two `three `four `five ` ` ` `

   _10{.t
` ` ` ` `zero `one `two `three `four `five

   0 s: 0                           NB. мощность (текущее # уникальных символов)
8

   a=:   ;:'A AAPL AMAT AMD AMZN ATT BA CRA CSCO DELL F GE GM HWP IBM INTC'
   a=: a,;:'JDSU LLY LU MOT MSFT NOK NT PFE PG QCOM RMBS T XRX YHOO'
   b=: ;:'NY SF LDN TOK HK FF TOR'
   c=: ;:'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'
   d=: <;._1 ' 00 01 02 03 04 05 06 07 08 09'
   e=: ;:'open high low close'

   t=: }.@;&.>{' ',&.>&.>a;b;c;d;<e
   $t
30 7 12 10 4
   */ $t
100800
   2 4 ($,) t
+----------------+----------------+---------------+-----------------+
|A NY Jan 00 open|A NY Jan 00 high|A NY Jan 00 low|A NY Jan 00 close|
+----------------+----------------+---------------+-----------------+
|A NY Jan 01 open|A NY Jan 01 high|A NY Jan 01 low|A NY Jan 01 close|
+----------------+----------------+---------------+-----------------+
   y=: s: t                         NB. создать очень много символов
   $y
30 7 12 10 4
   2 4 ($,) y
`A NY Jan 00 open `A NY Jan 00 high `A NY Jan 00 low `A NY Jan 00 close
`A NY Jan 01 open `A NY Jan 01 high `A NY Jan 01 low `A NY Jan 01 close

   0 s: 11                          NB. проверить целостность таблиц
1
   0 s: 0                           NB. мощность
100808

   (+/ % #) 0 s: 12                 NB. среднее # запросов на символ
1.31213

   h=: 100808 {. 2 {"1 ] 0 s: 2     NB. хеш-значения

   (+/ ~: h) % #h                   NB. доля разных хеш-значений
0.999821
   (+/ ~: h |~ #0 s: 4) % #h        NB. доля по отношению к хеш-таблице
0.831005
Память и процессорное время

В текущей реализации символ y требует 4 байта для индекса 8 или более байт в хеш-таблице, 44 байта в таблице символов, и len y байт (умноженное на два, если Unicode) в таблице строк, где len=: #&>@(5&s:) есть длина имени символа. (символ требует один 4-х байтный элемент хеш-таблицы, но для эффективного хеширования система поддерживает по меньшей мере 2*n элементов для n символов.) Множественные вхождения символов требуют лишь дополнительных индексов; элементы хеш-таблицы, таблицы символов, и таблицы строк не дублируются.

Вычисления с символами обычно требуют линейного времени. В частности:
  query (new)        O((len y) * ^. 0 s: 0)
query (old) O(len y)
/:yO(*/$y)
i{yO((*/$i) * */}.$y)
x < y etc.O(x >.&(*/@$) y)
x i. yO(x + &(*/@$) y)

Длительное хранение

Интерпретация символов зависит от глобальных данных о символах 0 s: 10. Чтобы сохранить эту интерпретацию для разных сессий J необходимо сохранить и восстановить их в начале сессии. Тоесть:

((3!:1) 0 s: 10) 1!:2 <'symb.dat'         сохранить символы
10 s: (3!:2) 1!:1 <'symb.dat' восстановить символы

См. предостережения в описании 10 s: x.




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