2012-03-23 9 views
0

名前がついている人のデータ型があり、その体重が以下のようになっています。私は与えられた人物から設定された第1のサブをフィルタリングし、取得したい場合は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

+0

@jberrymanまあまあ私は自分でハスケルを学んでいます。私は自分自身で私の任務のために完全にPythonのナップザックソリューションを行い、それを学ぶためにHaskellと同じことをしようとしました。私はちょうどここの初心者です。 –

+0

@leftaroundabout私はフィルタオプションを使用するような他の例を見ましたが、それらを使用する方法がわからないので、私はこのような質問を提起しました –

答えて

2

に最初のフィルタを用いて行うことができます。 2番目はナップザック問題のようです。その場合は、それを解決するための戦略を検索することができます。コードを書いた後に問題が発生した場合は、ここに再度投稿してください。コミュニティがお手伝いします。