0

リストのモードを見つけて、モードのタプルとリスト内での回数を返そうとしています。各番号とその後の発生回数のリストを返すことができるようになりましたが、最初の回数を超えた回数も返されます。

fun counter(_, nil) = 0
  | counter(a, x::xs) = if a = x then 1+counter(a, xs)
            else counter(a, xs);

fun countList(nil) = []
  | countList(x::xs) =
    (x, counter(x, x::xs))::countList(xs);

val lst = countList([1,2,1,1,3,4,5,2,1,2,1]);

val lst = [(1,5),(2,3),(1,4),(1,3),(3,1),(4,1),(5,1),(2 ,2),(1,2),(2,1),(1,1)] : (int * int) リスト

これは問題ではありません。各値をループして最初の値が等しいかどうかを確認し、最初の値のみを返し、最大のものだけを返しますが、その部分を理解できないようです。リストをループして、チェックしている現在の値と比較するのに問題があると思います。

4

1 に答える 1