Haskell:当条件为真时从列表中选择列表

sep*_*eph 1 select haskell list

我想在条件为真时从列表中选择一些列表,如下所示:

我已经建立了一个数据结构 - > data File = File {name :: String, size :: Integer, comment :: String} deriving Show

我已经创建了一个包含以下结构的所有文件的库:

files = [["name1",size1,"coment1"],["name2",size2,"coment2"],["name3",size3,"coment3"],...]

现在我需要的是一个函数,它选择我所有的大小例如> = 500的列表,类似于

list = select ((>=500.size) files)

所以,如果我有:

files = [["asd",345,"coment1"],["fgh",678,"coment2"],["hjk",123,"coment3"],...]

我会得到:

list = [["fgh",678,"coment2"]]

任何帮助都将很高兴.

提前致谢.

Dan*_*her 5

Prelude包含有用的

filter :: (a -> Bool) -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

这就是你打算select做什么的.

回答你对Jon Purdy回答的评论:

filter ((>= 500) . size) files
Run Code Online (Sandbox Code Playgroud)

在旁边:

files = [["asd",345,"coment1"],["fgh",678,"coment2"],["hjk",123,"coment3"],...]
Run Code Online (Sandbox Code Playgroud)

不起作用,列表是同质的.它应该在问题的背景下

files = [File "asd" 345 "coment1", File "fgh" 678 "coment2", ... ]
Run Code Online (Sandbox Code Playgroud)

File已经使用记录语法定义,您可以将它与记录语法或vanilla位置语法一起使用,无论在给定情况下哪种更好.记录语法比上面的语法输入更多,但是如果你使用它,files = [File{ name = "asd", size = 345, comment = "coment1" }, ... ]如果你在类型中添加字段会继续工作 - 然后将实例化添加的字段undefined,这可能会或可能不会比没有编译的代码更好变化.