リスト内のすべての値の順列に対する関数に取り組んでいます。
これが私がこれまでに持っているものです:
//MY ROTATE FUNCTION
fun rotate e [] = [[e]]
| rotate e (x::xs)= (e::x::xs)::(List.map (fn l => x::l) (rotate e xs));
//MY CURRENT PERMUTATION FUNCTION
fun perm [] = []
| perm (x::xs) = List.concat(List.map (fn l => (rotate x xs)) xs) @ perm xs;
出力:
- perm [1,2,3];
val it = [[1,2,3],[2,1,3],[2,3,1],[1,2,3],[2,1,3],[2,3,1],[2,3],[3,2]]
出力は、[[1、2、3]、[1、3、2]、[2、1、3]、[2、3、1]、[3、1、2]、[3、 2、1]]。ご覧のとおり、ここで何かが足りません。問題は、rotate 3 [1,2]がコードから欠落しているものであり、2つの2要素リストが何らかの理由でここにあるため、私の3がrotateに渡されていないことだと思います。
出力を正しく表示するようにperm関数を修正するにはどうすればよいですか?どんなに大きくても小さくても、どんな助けでも私を大いに助けてくれるでしょう。