2012-04-16 10 views
0
testDatabase :: [Film] 
testDatabase = [("Director 1","Film 1",2012,[]),("Director 2","Film 2",2,[])] 

filmsByDirector :: String -> [Film] 
filmsByDirector name = filter (\(a,_,_,_) -> a == name) testDatabase 

私は別の関数からこれを呼び出していると私は私のような出力が表示できるように、リストをフォーマットしようとしています:ハスケル - フォーマットのリスト出力

Director: Director 1 
Film Name: Film 1 
Year: 2012 
Ratings: 

任意の助けを?

+3

'Film'をとり、' String'を返す関数を書くと、それをあなたのリストにマップします。この関数は 'unlines'と' show'を使ってデータから文字列を生成することができます。 –

答えて

1

文字列を受け取り、それを書式設定された文字列に変換する関数が必要です。実装はストレートな書式設定です。

formatString :: Film -> String 

その後、ちょうど最後の文字列は、結果を取得すること(concat)あなたは(map経由)に興味のあるすべてのFilmにこの機能を適用し、参加する必要があります。

type Film = (String, String, Int, [Int]) 

testDatabase :: [Film] 
testDatabase = [("Director 1","Film 1",2012,[]),("Director 2","Film 2",2,[])] 

filmsByDirector :: String -> [Film] 
filmsByDirector name = filter (\(a,_,_,_) -> a == name) testDatabase 

formatString :: Film -> String 
formatString (dir, film, year, rat) = "Director: " ++ (show dir) ++ "\nFilm Name: " ++ (show film) ++ "\nYear:" ++ (show year) ++ "\nRatings: " ++ concatMap (\r -> (show r) ++ " ") rat 

formattedByDirector :: String -> String 
formattedByDirector dir = concatMap formatString $ filmsByDirector dir 

putStrLn $ formattedByDirector "Director 1" 
関連する問題