List Haskell-格式列表输出

List Haskell-格式列表输出,list,haskell,List,Haskell,我从另一个函数调用此函数,并尝试格式化列表,以便可以看到如下输出: testDatabase :: [Film] testDatabase = [("Director 1","Film 1",2012,[]),("Director 2","Film 2",2,[])] filmsByDirector :: String -> [Film] filmsByDirector name = filter (\(a,_,_,_) -> a == name) testDatabase 有什

我从另一个函数调用此函数,并尝试格式化列表,以便可以看到如下输出:

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:
然后,您只需将此函数应用于您感兴趣的每一部
影片
(通过
映射
),并加入(
concat
)最终字符串即可获得结果

formatString :: Film -> String

编写一个函数,获取
胶片
并返回
字符串
,然后将其映射到列表中。该函数可以使用
unlines
show
从数据生成字符串。
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"