Learn you a Haskellに従って、楽しく Haskell を学んでいます。を使用すると、範囲が数値で無限大になる可能性があります[1..]
。文字の場合、範囲はどこで['a'..]
止まりますか? Unicode テーブルの最後の文字だと思いますが、Haskell については何も知らないので、質問してください。
2 に答える
範囲がどこで終わるか知りたい場合は、最後の項目を取得してください…</p>
ghci> last ['a'.. ]
'\1114111'
別の方法:Char
境界型、つまり最小値と最大値が定義された型です。Bounded
クラスの型はmaxBound
値を提供します。はポリモーフィックであるためmaxBound
、探している値の型を明示的に指定する必要があります。
ghci> maxBound :: Char
'\1114111'
ghci> maxBound :: Int
9223372036854775807
それらは無制限であるため、 maxBound
forはありません。Integer
Haskellのプレリュードでは、['a'..]
との関係が説明されていますmaxBound
。表記法['a'..]
は ; のシンタックス シュガーですenumFrom a
。これは型クラスenumFrom
のメソッドです。Enum
のドキュメントではEnum
、型が のインスタンスでもある場合Bounded
、enumFrom x
は と同等enumFromTo x maxBound
であるか、より読みやすいように と指定されています[x..] = [x..maxBound]
。したがって、 の最後の要素は['a'..]
と同じでなければなりませんmaxBound :: Char
。
last ['a'.. ]
はリストを繰り返し処理しますが、最新のコンピューターは瞬く間に 100 万まで数えることができます。ぐるぐる回したくなるようなものではありませんが、一度だけ実行するものとしては大きな負担にはなりません。GHC の代わりに Hugs などのあまり最適化されていない実装で試してみると、結果を待つ必要があるかもしれません。対照的last [0..]
に、ほぼ永遠にかかります。