C++のnext_permutationをHSP化。
実際に(題意の用途的に)使うのであれば、文字を配列要素にして、配列番号の配列をこの関数に入れて使うといいんじゃないでしょうか
#module
#deffunc swap var a,var b
tmp=a
a=b
b=tmp
return
#define global reverse(%1) __reverse %1,0,length(%1)
#deffunc __reverse array data,int first,int last
repeat (last-first)/2
swap data(first+cnt),data(last-cnt-1)
wait 0
loop
return
#defcfunc next_permutation array data,local i,local j,local ii
if(length(data)<=1){
return 0;
}
i==length(data)
i--
repeat
ii=i
i--
if(data(i)<data(ii)){
j=length(data)
do
j--
until(data(i)<data(j))
swap data(i),data(j)
__reverse data,ii,length(data)
return 1
}
if(i==0){
reverse data
return 0
}
wait 0
loop
return 0
#global
a=1,2,3,4
do
mes strf("%d,%d,%d,%d",a(0),a(1),a(2),a(3))
until (0==next_permutation(a))