これを説明するのは簡単ではありませんが、試してみます。私は私の方法をいくつかのCと混同していると思いますが、ここに行きます:
次のように、リストが完全かどうかを確認したい:
main> check 1 [1,3,4,5]
False
main> check 1 [1,2,3,4]
True
これは有限リストであり、リストを順序付ける必要はありません。しかし、リスト内には、True にならない数がほとんどです。最初のケースでは、番号 2 です。
これは私のバージョンですが、コンパイルさえしません。
check :: Eq a => a -> [a] -> Bool
check n [] = False
check n x | n/=(maximum x) = elem n x && check (n+1) x
| otherwise = False