12 34 56
のような入力をHaskellを使って3つの整数に読みたいと思っています。Haskellのstdinから3つの連続する整数を読み込むには?
単一の整数の場合、myInteger <- readLn
を使用することがあります。その後、非常にハック感じたread '[' ++ str ++ ']'
を呼ぶ:しかし、このような場合のために、私は最初の1は、,
ですべてのスペースを置き換える(
spaceToCommas str =
let repl ' ' = ','
repl c = c
in map repl str
のようなものを使用して)、その後、ラインを読み除いて、任意の解決策を見つけていません。また、私はの3つのの整数を読みたいと述べることはできません。の整数をstdinから読み取ろうとします。
もっと良い方法があるはずです。
ではなく、は外部パッケージを使用してください。たとえばを使用します。 Parsecはもちろん素晴らしいですが、この単純な例では本格的なParser Combinatorフレームワークを使用する必要はありません。以下のような文字列を変換について
doブロックで 'readLn'を3回呼び出すだけではどうですか?あるいは、副作用のあるマップを使用し、長さ3の範囲をマップし、関数内で 'readLn'を呼び出します。それは3つのintのリストを返します。 – Carcigenicate
1行から3つの整数を読み込みますか?入力は通常、ラインバッファリングされています - 1行に4つの整数がある場合はどうなりますか? 2つだけの場合はどうなりますか? – Carl
ああ、一行読んでみたいですか?どうしてそちらをスペースで分割して読んでみませんか? – Carcigenicate