Чтение указанного количества строк - PullRequest
1 голос
/ 04 июля 2011

Я всегда программировал на C ++ и Pascal и слишком настойчиво думаю. Итак, кто-нибудь может мне помочь с вопросом:

Предположим, у нас есть следующий шаблон ввода:

integer n
n strings
other data

Например:

2
foo
bar
3 4
and so on.

Итак, мне нужно читать только n строк в список, без чтения других данных. Как мне это сделать без фор-подобных конструкций?

1 Ответ

4 голосов
/ 04 июля 2011

Один из возможных методов:

getLines n = sequence $ replicate n getLine

getLine - это действие ввода-вывода, которое считывает строку из стандартного ввода и возвращает ее в виде строки.Его тип IO String.

replicate n создает список из n идентичных предметов.Итак, replicate n getLine представляет собой список n действий ввода-вывода, каждое из которых возвращает строку: [IO String].

sequence - это функция, которая принимает список действий, которые возвращают что-то, и превращает его водиночное действие, которое возвращает список этого чего-то.Так что если у нас есть [IO String], то sequence превратит его в IO [String].

Именно этого мы и хотим.

...