//l:=[1,2,3]; circulaire(l) //renvoie la liste l ou la tete est mise a la fin. circulaire(l):={ return concat(tail(l),l[0]); }; //l:=[1,2,3];permcc(l,l) //renvoie les permutations circulares de l //sans variable locale, ld liste reference de depart permcc(l,ld):={ if (ld==[]) return []; return [l,op(permcc(concat(tail(l),l[0]),tail(ld)))]; }; //l:=[1,2,3];permutation_circ(l) //renvoie les permutations circulares de l //utilise permcc permutation_circ(l):={ return permcc(l,l); }; //echange ds l les elements d'indices j et k echange(l,j,k):={ local a; a:=l[j]; l[j]:=l[k]; l[k]:=a; return l; }; //utilise echange permuts([1,2,3,4],0)permuts(l,k):={ local lr; if (k==size(l)-1) return [l]; lr:=[]; for (j:=k;j