Я хочу прочитать ввод как 12 34 56
в три целых числа, используя Haskell.Как читать три последовательных целых числа от stdin в Haskell?
Для одного целого можно использовать myInteger <- readLn
. Но в этом случае, я не нашел ни одного решения, за исключением одного из первого чтения строки, а затем заменить все пробелы с ,
, (используя что-то вроде:
spaceToCommas str =
let repl ' ' = ','
repl c = c
in map repl str
) и затем вызвать read '[' ++ str ++ ']'
, который чувствует себя очень хаком. Кроме того, это не позволяет мне заявить, что я хочу прочитать три целых числа, он попытается прочитать любой количество целых чисел от stdin.
Должен быть лучший способ.
Обратите внимание, что я хотел бы получить решение, которое делает не полагаться на внешние пакеты. Использование, например, Parsec, конечно, здорово, но этот простой пример не должен требовать использования полноценной рамки Parser Combinator, верно?
Почему бы не просто вызвать 'readLn' 3 раза в блоке do? Или используйте карту с побочными эффектами, карту в диапазоне длины-3 и вызовите 'readLn' внутри функции. Это вернет список из 3 целых чисел. – Carcigenicate
Вы хотите прочитать 3 целых числа из одной строки? Вход обычно буферизируется по строке - что, если в одной строке есть 4 целых числа? Что делать, если их всего 2? – Carl
О, вы хотите прочитать одну строку? Почему бы просто не прочитать это, а затем разбить на пробелы? – Carcigenicate