【发布时间】:2012-02-07 00:24:13
【问题描述】:
所以我正在创建一个程序,它将选择两个库(audio.lhs 或 video.lhs)之一,并返回一个 pdf,其中包含按给定类别排序和过滤的列表:
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)
我希望他们使用程序用户选择的值(输入),而不是使用我给出的值,所以如果他想过滤 >2000 或
我的数据结构是
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的用户输入。这与你现在想做的有什么不同?你试过什么? -
感觉就像我们在这里做结对编程 :-) 在过去的两天里,你问了四个关于这个程序的问题。我不确定 Stack Overflow 是否合适——也许改用 Haskell IRC channel?
-
@seph:是的,他们基本上是在讨论同一个程序,我个人觉得邮件列表或 IRC 频道更适合。
-
附带说明,我对这个程序的结构持怀疑态度。使用 Haskell 生成 Haskell 是解决一个非常具体的问题的方法,从我所看到的 Haskell 生成的情况来看,您并没有遇到这种问题。只写代码;你不需要写写代码的代码。
-
...我刚刚注意到您正在编写代码(在 Haskell 中,作为文件)编写代码(在 Haskell 中,作为字符串)编写代码(在 TeX 中,作为字符串) 编写代码(PDF 格式)。一个健全的链就是“Haskell -> PDF”(有几个库可用于生成 PDF),或者如果您需要 TeX 的复杂布局算法,“Haskell -> TeX(作为 TeX 特定的数据类型)-> PDF”(有用于生成格式良好的 TeX 的库)。以
String作为唯一真实数据类型的这一长串编译器实在是……太可怕了。
标签: list sorting haskell input filter