2012-05-01 15 views
0

可能性の重複:ハスケル - タプルのリストの平均

data Film = Film String String Int [Rating] 
    deriving (Show,Ord,Eq, Read) 

サンプルフィルム:

("Ridley Scott","Alien",1979,[("Mark",5),("Zoe",3)]) 
私はデータ型を持つ

Haskell - Selectively Adding Lists

[映画]リストのすべての映画の平均監督評価を取得するにはどうすればよいですか?

リドリー・スコットの両方が個別に5の平均スコアを持っていたし、彼は5

の全体の平均スコアう2枚のフィルムを持っていたのであれば、私は、単一のフィルム

filmRating :: [(String,Int)] -> Float 
filmRating ratings = average (map snd ratings) 
をうまくするためのコードを持っています
+0

あなたは、私たちにあなたが書いしようとしたコードをしてください示してもらえますか? –

+0

私は、単一のFilm filmRating :: [(String、Int)] - > Floatを計算するコードを持っています filmRating ratings = average(map snd ratings) – JamieB

+0

平均スコアを返す関数 'Film - > Float'を書く(パターンマッチングを使う)。次に、映画のリストの平均スコアを返す '' Film - > Float'関数を書く( 'average'とそれ以前の関数を使う)。 – sdcvvc

答えて

1

本当の答えではなく、ほんの一部の初心者メモです。

Director,Titleなどのタイプエイリアスを使用できます。

だあなた film例がどのように見えるべき理由
type Director = String 
type Rate = Double 
type Rater = String 
type Ratings = [(Rater, Rate)] 
type Title = String 
type Year = Int 

data Film = Film Director Director Year Ratings 
    deriving (Show,Ord,Eq, Read) 

:あなたはfilmRatingという名前の関数を持っている場合

film = Film "Ridley Scott" "Alien" 1979 [("Mark",5),("Zoe",3)]

それは:: Film -> Rateのようなものでなければなりません:

filmRating :: Film -> Rate 
filmRating (Film _ _ _ ratings) = average (map snd ratings) 

どうでしょう平均的なダイレクトを手に入れよう[映画]リストのすべての映画の評価?

あなたはdirectorsAverageRate :: Director -> [Film] -> Rateのようになります。

まず、フィルムをDirector値でフィルタリングする必要があります。値は:: Film -> Directorです。このフィルタリングされたリストの場合、平均レートはaverage . (map filmRating)となります。


UPD

私は関与して映画を持っていた後、私は、全体の平均値を取得する方法を理解していません。

のはsimilar questionからaverage関数の定義を見てみましょう:次に

average :: (Real a, Fractional b) => [a] -> b 
average xs = realToFrac (sum xs)/genericLength xs 

> let one_film = Film "Ridley Scott" "Alien" 1979 [("Mark",5),("Zoe",3)] 
one_film :: Film 

> let another_film = Film "Ridley Scott" "Alien2" 2979 [("Mark",4),("Zoe",2)] 
another_film :: Film 

> let films = [one_film, another_film] 
films :: [Film] 

> average . (map filmRating) $ films 
3.5 
it :: Double 
+0

ええ、私はフィルタリングを理解していますが、私は映画が関与した後に全体の平均を取得する方法を理解していません。 – JamieB