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:

何か助けはありますか?

4

1 に答える 1

1

文字列を受け取り、それをフォーマットされた文字列に変換する関数が必要です。実装はストレートフォーマットです。

formatString :: Film -> String

次に、この関数をFilm(を介して)関心のあるすべての文字列に適用し、その最後の文字列をmap結合( )して結果を取得する必要があります。concat

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"
于 2012-04-16T19:53:49.063 に答える