【发布时间】:2011-05-10 19:35:04
【问题描述】:
我正在尝试按列表中的项目过滤并逐行打印它们。这是我的代码:
data Car = Car String [String] Int [String]
testDatabase :: [Car]
testDatabase = [Car"Casino Royale" ["Daniel Craig"] 2006 ["Garry", "Dave", "Zoe", "Kevin", "Emma"],Car"Blade Runner" ["Harrison Ford", "Rutger Hauer"] 1982 ["Dave", "Zoe", "Amy", "Bill", "Ian", "Kevin", "Emma", "Sam", "Megan"]]
formatCarRow (Car a b c d) = show a ++ " | " ++ concat [i ++ ", " | i <- init b] ++ last b ++ " | " ++ show c ++ " | " ++ concat [j ++ ", " | j <- init d] ++ last d
displayFilmsByYear :: String -> IO [()]
displayFilmsByYear chosenYear = mapM (putStrLn.formatFilmRow) [putStrLn(filter ((== chosenYear).y)) | (w x y z) <- testDatabase] -- This is the code not working i think
为什么这不起作用?
【问题讨论】:
-
您的意思是
data Film = Car …?否则testDatabase中存在类型不匹配。formatFilmRow/formatCarRow类似。 -
我现在编辑了这个,抱歉这不是问题原来的问题仍然存在:/
-
只是出于好奇:您是否使用随机生成器来决定单词 putStrLn 在程序文本中的位置?开个玩笑.... :)
-
请考虑将您的程序分成许多较小的函数。这样你就可以思考得更清楚了。尽管这里的具体问题是其他问题,但一旦您整理了代码,错误就会出现。