Сортировать и взаимодействовать работать вместе во взаимном сотрудничестве? - PullRequest
0 голосов
/ 13 июня 2011

вот фрагмент из моего кода:

io f = interact (unlines . f . lines)

io (sortBy compare (read :: String -> Int))

поэтому я читаю строки, получаю числовые значения и сортирую их. Хотите вести меня по правильному пути?

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Вам нужно использовать comparing из модуля Data.Ord вместо compare:

import Data.Ord
import Data.List

io f = interact (unlines . f . lines)
main = io (sortBy (comparing (read :: String -> Int)))
1 голос
/ 13 июня 2011

Может быть, я не совсем понимаю ваш вопрос, но вот как я его получил:

Функция interact передает ввод из stdin в вашу программу и выводит результат в stdout,Используя lines и unlines, вы получаете входные и выходные данные, разделенные на строки, поэтому вы можете работать с этим слоем.Ваша функция io теперь больше ничего не делает, затем помещает функцию f в эту структуру.

Далее sortBy compare - это не что иное, как sort.Таким образом, вы в основном конвертируете строки в числа и сортируете их таким образом.Результатом является список номеров.Возможно, вы заметили, что ваша программа не может проверить тип в этой точке, так как unlines ожидает [String], а не [Int] для ввода.Измените вашу функцию на map show $ sort (read :: String -> Int), чтобы исправить это.Я бы на самом деле написал map show $ sort (asTypeOf 0 . read) instead, making it an Integer instead of an Int` и был бы более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...