Power (operator)

(Redirected from Repeat)
 `⍣`

Power (`⍣`) is a primitive dyadic operator that performs bounded looping, unbounded looping, and function inverses in NARS2000, Dyalog APL, and related implementations like ngn/apl, dzaima/APL, and Extended Dyalog APL.

Description

A call to Power is of the form `X(f⍣g)Y`, where

• `X` is an optional argument.
• `f` is a function. If `X` is given, then it is bound to `f` so `X f⍣g Y` is equivalent to `X∘f⍣g Y`.
• `g` can be an array or a function.

Power repeatedly applies `f` to `Y` based on the type of operand `g`:

• Function: Must be dyadic and must return a boolean singleton. The previous iteration value is provided as the right argument to `f`, and the current iteration value is given as the left argument. `f` is repeatedly applied until this function returns 1.
• Integer: Applies `f` `g` times to `Y`. If `g` is negative, then the inverse of `f` (if available) is applied.
• Integer Array: In Extended Dyalog APL, `g` can be an integer array. Each integer `i` in `g` will be replaced by `⊂(f⍣i)Y`.

Examples

Some basic examples:

```      1 (+⍣3) 5 ⍝ Fixed number of iterations
8
(2∘×⍣3) 5 ⍝ No X given
40
1 +∘÷⍣= 1 ⍝ iterate till fixed point
1.618033989```

A well-known use for Power is iterating until a fixed point is reached.

```      (∨.∧⍨∨⊢)⍣≡3 3⍴0 0 1 1 0 1 1 0 1 ⍝ Transitive closure of an adjacency matrix
1 0 1
1 0 1
1 0 1```

Power is also used to access function inverses.

```      2(⊥⍣¯1)5
1 0 1```