В Степени | u^:n _ _ _ |
n может быть целым, упаковкой или герундием. Целое. Глагол u применяется n раз. Бесконечная степень n повторяет вычисления до достижения неподвижной точки (предела) u . Например, (2&o.^:_)1 дает 0.73908 , т.е. решение уравнения y=Cos y . Если n отрицательно, обращение u^:_1 (см. ниже) применяется |n раз. Наконец, u^:n y для массива n получается, сборкой всех u^:a y (для всех атомов a из n) в результирующий массив. Обращение используется и в u&.v , узнать его для данного v можно при помощи v b. _1 . Повторного применения глагола можно достигнуть и при помощи С (&). Упаковка. Если n упаковка, то ее содержимое должно быть атомом, тогда u^:(<m)
Герундий. См. справа. |
n может быть целым, упаковкой или герундием. Целое или Упаковка. x u^:n y ↔ x&u^:n y Герундий. (Сравните с применением герундия в наречии Заменяя }) |
Обращения (которые обычно, но не всегда, являются обратными друг другу глаголами в строгом смысле) можно разбить на шесть классов:
1. |
Функции, обращающие сами себя + - -. % %. |. |: /: [ ] C. p. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2. |
Пары в следующих таблицах:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3. |
Очевидно обратимые связанные диады, такие
как -&3 и 10&^.
и 1 0 2&|: и 3&|. и 1&o.
и a.&i. , а так же u@v и u&v ,
если u и v обратимы. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. |
Монады вида v/\ и v/\. , где v
один из + * - % = ~: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5. |
Обращения, указанные явно союзом :. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6. |
Следующие случаи заслуживают особого внимания: p:^:_1 n дает число простых чисел меньших n, обозначается в математике как π(n) q:^:_1 есть */ b&#^:_1 , где b булевский список, производит расширение массива (используемый при этом атом-заполнитель f можно настроить b&#^:_1!.f или #^:_1!.f ) a&#.^:_1 дает представление по основанию a !^:_1 и !&n^:_1 и n&!^:_1 производят ожидаемые результаты {= и i."1&1 являются обратными друг другу; они выполняют преобразование между представлениями перестановки в виде вектора целых чисел и в виде булевской матрицы |
(] ; +/\ ; +/\^:2 ; +/\^:0 1 2 3 _1 _2 _3 _4) 1 2 3 4 5 +---------+-----------+------------+-------------+ |1 2 3 4 5|1 3 6 10 15|1 4 10 20 35|1 2 3 4 5| | | | |1 3 6 10 15| | | | |1 4 10 20 35| | | | |1 5 15 35 70| | | | |1 1 1 1 1| | | | |1 0 0 0 0| | | | |1 _1 0 0 0| | | | |1 _2 1 0 0| +---------+-----------+------------+-------------+
Пример 2: Последовательность чисел Фибоначчи
+/\@|.^:(i.10) 0 1 0 1 1 1 1 2 2 3 3 5 5 8 8 13 13 21 21 34 34 55 {. +/\@|.^:n 0 1x [ n=:128 NB. n-ное число Фибоначчи 251728825683549488150424261 {.{: +/ .*~^:k 0 1,:1 1x [ k=:7 NB. (2^k)-нное число Фибоначчи 251728825683549488150424261
Пример 3: Итерация Ньютона
-:@(+2&%)^:(0 1 2 3) 1 1 1.5 1.41667 1.41422 -:@(+2&%)^:(_) 1 1.41421 -:@(+2&%)^:a: 1 1 1.5 1.41667 1.41422 1.41421 1.41421 %: 2 1.41421
Пример 4: Подгруппа, генерируемая Множеством Перестановок
sg=: ~. @ (,/) @ ({"1/~) ^: _ @ (i.@{:@$ , ]) sg ,: 1 2 3 0 4 0 1 2 3 4 1 2 3 0 4 2 3 0 1 4 3 0 1 2 4 # sg 1 2 3 4 5 0 ,: 1 0 2 3 4 5 720
Пример 5: Транзитивное Замыкание
x=: (#x)<. (#x),~x=: (i.20)+1+20 ?.@# 3 (i.#x) ,: x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 4 5 5 7 6 9 9 10 12 11 14 14 15 16 18 18 18 20 20 20 {&x^:(<15) 0 0 1 4 7 9 12 14 16 18 20 20 20 20 20 20 {&x^:a: 0 0 1 4 7 9 12 14 16 18 20 x {~^:a: 0 0 1 4 7 9 12 14 16 18 20
Интерпретация: x представляет орграф с вершинами, пронумерованными как i.#x и ребрами от i к i{x . Например, выше присутствуют ребра: 0 1 , 1 4 , 2 5 , 3 5 и так далее. Тогда {&x^:a:0 или x{~^:a:0 вычисляет все узлы, достижимые из узла 0.
Example 6: Транзитивное Замыкание
Каждая запись в файле начинается с байта, указывающего ее длину (исключая байт, ее кодирующий), после которого следует содержимое записи. Получив такой файл, глагол rec производит список упакованных записей.
rec=: 3 : 0 n=. #y d=. _1 ,~ n<.1+(i.n)+a.i.y m=. d {~^:a: 0 ((i.n) e. m) <;._1 y ) randomfile=: 3 : 0 c =. 1+y ?@$ 255 NB. длины записей rec=. {&a.&.> c ?@$&.> 256 NB. содержимое записей (c{a.),&.> rec NB. записи, вместе с их длинами ) boxed_rec=: randomfile 1000 $ boxed_rec 1000 file=: ; boxed_rec $ file 132045 r=: rec file $r 1000 r -: }.&.> boxed_rec 1
Последняя фраза проверяет отсутствие в результате rec байт, кодирующих длину записей.