, поэтому я создаю программу, которая выберет одну из двух библиотек (audio.lhs или video.lhs) и вернет pdf-файл со списком, упорядоченным и отфильтрованным по данной категории:Haskell: фильтр и сортировка с использованием входных значений
mymain = do {putStrLn "What do you wanna search, Video or Audio?";
tipo <- getLine;
if tipo == "Audio"
then do {
a <- readFile "audio.lhs" ;
let text = splitEvery 7 (splitRegex (mkRegex "\t") a)
list = map musicFile text
select = filter ((>1000) .size) list
orderList = sortBy (comparing title)
dir = Dir orderList
hs = "import Dir\nimport TeX\nimport System.Cmd"
++ "\ntoTeX= do { writeFile \"out.tex\" $ prettyprint dat ;"
++ "system \"pdflatex out\"}"
++ "\ndat="
++ show dir
in do { writeFile "dat.hs" hs ;
putStrLn "\nOk.\nNow load \'dat.hs\' and run \'toTeX\'\n"
}}...
Все работает, но теперь мне нужно, что функции
select = filter ((>1000) .size) list
и
orderList = sortBy (comparing title)
вместо ш orking со значениями, которые заданы мной, я хочу, чтобы они работали со значениями, выбранными пользователем программы (входы), поэтому, если он хочет фильтровать файлы размером> 2000 или < 500, это его выбор и тот же с категорией, размер или название или другое.
Моя структура данных
data File = File {
filename :: String ,
size :: Int ,
filetype :: String ,
copyright :: String ,
title :: String ,
artist :: String ,
year :: String } deriving Show
и
musicFile :: [String] -> File
musicFile [name, size, tipo, copy, title, artist, year] = File name (read size) tipo copy title artist year
Любая помощь будет с удовольствием оценили.
Заранее спасибо.
Вы уже используете пользовательский ввод с 'getLine'. Как это отличается от того, что вы хотите сделать сейчас? Что вы пробовали? –
Я пробовал использовать 'getLine', но он не поймет, когда я дам ему Integer, плюс, когда я использую переменную, которая будет иметь фильтр значений' getLine' и сравните сбой, потому что это не то, чего они ждут – seph
. мы делаем пару программ здесь :-) Вы задали четыре вопроса об этой программе за последние два дня. Я не уверен, что Stack Overflow подходит для этого - может быть, вместо этого использовать IRC-канал [Haskell IRC] (http://www.haskell.org/haskellwiki/IRC_channel)? –