I&#39;m learning Haskell and I&#39;m trying to translate a pseudocode algorithm to generate the next permutation from a previous permutation.<br><br>A permutation is a list of n numbers (let&#39;s call it a) in {1 .. n} appearing once in arbitrary order.<br>
<br>The first step is to find the largest index j in the list for which a[j] &lt; a[j+1].<br><br>The pseudocode is simple:<br><br>j:= n-1<br><br>while a[j] &gt; a[j+1]<br>    j:=j-1<br><br><br>I&#39;ve coded a haskell function to do this, but it is much uglier than the pseudocode :<br>
<br>j :: Integral a =&gt; [a] -&gt; Int<br>j [] = 0<br>j xs = if (head (tail (reverse xs)) &lt; last xs) <br>          then (length xs)-2 <br>          else j (take (length xs - 1) xs)<br><br><br>Does anyone has a more elegant solution for this first step?<br>