2012-03-23 39 views
0

我得到了一个具有名称和权重的人类数据类型,如下所示。Haskell数据类型筛选器子列表的列表

data Person = Person 
    {pName :: String, 
    pWeight :: Double} deriving (Show) 

persons :: [Person] 
persons = [Person "Peter" 35.0, 
      Person "Joe" 45.0, 
      Person "Alex" 55.0, 
      Person "Ruby" 60.0, 
      Person "John" 65.0, 
      Person "Ann" 35.0] 

Q1如果我要筛选并获得第一子从给定的人设置列出其最大的权重之和小于给定值怎么办呢?

如输出,如果最大重量为150.0

人 “彼得” 35.0

人 “乔” 45.0

人 “亚历克斯” 55.0

总重量:135.0

Q2如果我想获得设定的最大重量的所有子集

如输出,如果最大重量是100.0

集1

人 “彼得” 35.0 人 “乔” 45.0

总重量:80.0

集2

人“Alex”55.0

总重量:55.0

集3 ......等等

+0

这是你的作业吗? – jberryman 2012-03-23 00:56:42

+0

@jberryman还不完全是我自己学习Haskell。我完全依靠自己的作业为我的作业做了一个python背包解决方案,并试图用Haskell来学习它。我只是这里的初学者。 – 2012-03-23 09:37:47

+0

@leftaroundabout以及我看到其他例子,如使用过滤器选项,但不知道如何使用它们,这就是为什么我提出了这样的问题 – 2012-03-23 09:37:53

回答

2

第一个可以使用过滤器来完成。第二个看起来像背包问题。在这种情况下,您可以搜索解决它的策略。如果您在编写代码后遇到任何问题,请在此重新发帖,社区将很乐意提供帮助。