Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
Function: _forperm_init
Class: gp2c_internal
Help: Initialize forperm_t
Description:
(forperm,gen):void forperm_init(&$1, $2)
Function: _forperm_next
Class: gp2c_internal
Help: Compute the next permutation
Description:
(forperm):vecsmall forperm_next(&$1)
Function: forperm
Section: programming/control
C-Name: forperm0
Prototype: vGVI
Iterator:
(gen,gen) (forperm, _forperm_init, _forperm_next)
Wrapper: (,vG,,)
Help: forperm(a,p,seq): the sequence is evaluated, p going through permutations of a.
Doc: evaluates \var{seq}, where the formal variable $p$ goes through some
permutations given by a \typ{VECSMALL}. If $a$ is a positive integer then
$P$ goes through the permutations of $\{1, 2, ..., a\}$ in lexicographic
order and if $a$ is a small vector then $p$ goes through the
(multi)permutations lexicographically larger than or equal to $a$.
\bprog
? forperm(3, p, print(p))
Vecsmall([1, 2, 3])
Vecsmall([1, 3, 2])
Vecsmall([2, 1, 3])
Vecsmall([2, 3, 1])
Vecsmall([3, 1, 2])
Vecsmall([3, 2, 1])
@eprog\noindent
When $a$ is itself a \typ{VECSMALL} or a \typ{VEC} then $p$ iterates through
multipermutations
\bprog
? forperm([2,1,1,3], p, print(p))
Vecsmall([2, 1, 1, 3])
Vecsmall([2, 1, 3, 1])
Vecsmall([2, 3, 1, 1])
Vecsmall([3, 1, 1, 2])
Vecsmall([3, 1, 2, 1])
Vecsmall([3, 2, 1, 1])
@eprog\noindent