【问题标题】:Haskell: filter and sort using input valuesHaskell:使用输入值进行过滤和排序
【发布时间】: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


【解决方案1】:

Haskell 中用于解析字符串的最简单机制是Read typeclass。这个类的实例有足够的功能来实现

read   :: (Read a) => String -> a
readLn :: (Read a) => IO a

其中任何一个都足以让您开始从输入中读取Int(这是Read 的一个实例)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
  • 2022-01-11
  • 2016-07-25
相关资源
最近更新 更多