在IO Haskell中正确使用printF命令
键入UserRatings=(字符串,Int)在IO Haskell中正确使用printF命令,haskell,io,printf,Haskell,Io,Printf,键入UserRatings=(字符串,Int) 电影类型=(片名、导演、年份、, [用户评级]) 我正在尝试为IO使用适当的printF方法,但我无法找出哪里出了问题。我知道问题与用户评级有关 在neo.txt文件中,有25个胶片类型,我正在尝试在我制作的用户界面菜单中打印它们 用户输入main->然后输入用户名->然后选择“2”,然后应该显示电影 displayFilmsIO :: Database -> IO() displayFilmsIO [] = putStrLn
电影类型=(片名、导演、年份、, [用户评级]) 我正在尝试为IO使用适当的printF方法,但我无法找出哪里出了问题。我知道问题与用户评级有关 在neo.txt文件中,有25个胶片类型,我正在尝试在我制作的用户界面菜单中打印它们 用户输入main->然后输入用户名->然后选择“2”,然后应该显示电影
displayFilmsIO :: Database -> IO()
displayFilmsIO [] = putStrLn "There are no films in the database"
displayFilmsIO filmList = sequence_[printf("|%-25s| |%-65s| |%-10d| |(%s,%d) |\n") title director year [(name,rating)] | (title, director, year, [(name,rating)]) <- filmList]
mainMenu :: [Film] -> String -> IO()
mainMenu list user = do
putStrLn "What do you want to do ?(choose one of the options below)"
putStrLn "[1] Add a film to the database \n[2] View all Films \n[3] View all films that you are fan of of\n[4] View all fans of a particular film \n[5] View all the films that were released during a particular period\n[6] Be a fan of a particular film\n[7] View the average number of fans for the films starring a particular actor \n[8] View the names of actors who have co-starred in at least one film with a particular actor \n[9] Save \n[0] Exit"
putStrLn "__________________________________"
choice <-getLine
case choice of
"2" -> do
printf ("|%-25s| |%-65s| |%-10d| | %s,%d |\n") "Title" "Cast" "Year" "Fans"
displayFilmsIO list
mainMenu list user
displayFilmsIO::数据库->IO()
displayFilmsIO[]=putStrLn“数据库中没有电影”
displayFilmsIO filmList=sequence|[printf(“|%-25s | |%-65s | |%-10d | |(%s,%d)| \n”)头衔导演年份[(姓名,评级)](头衔,导演,年份,[(姓名,评级)]字符串->IO()
主菜单列表用户=do
putStrLn“您想做什么?(选择以下选项之一)”
putStrLn“[1]将一部电影添加到数据库\n[2]查看所有电影\n[3]查看您喜爱的所有电影\n[4]查看特定电影的所有影迷\n[5]查看在特定时期发行的所有电影\n[6]成为特定电影的影迷\n[7]查看由特定演员主演的电影的平均影迷人数\n[8]查看至少与特定演员共同主演过一部电影的演员的姓名\n[9]保存\n[0]退出“
计算机“\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
选择做
printf(“|%-25s | |%-65s | |%-10d | |%s,%d |\n”)标题“演员”“年”“粉丝”
显示电影列表
主菜单列表用户
这是主要的方法。它没有问题,它可以编译,但只是为了让您了解更多信息
main :: IO ()
main = do
films <- loadFile2
getName2 films
loadFile :: FilePath -> IO (Either ParseError [Film])
loadFile filename = do
handle <- openFile filename ReadMode
!database <- hGetContents handle
hClose handle
return $ parse films "Films" database
loadFile2 :: IO [Film]
loadFile2 = do
allFilms <- readFile "neo.txt"
let films = read allFilms :: [Film]
return films
getName2 :: [Film] -> IO ()
getName2 films = do
main::IO()
main=do
胶片IO(解析错误[胶片])
loadFile filename=do
处理代码片段
printf("|%-25s| |%-65s| |%-10d| |(%s,%d) |\n") title director year [(name,rating)]
看起来错误:5个格式字符串%
参数,但4个参数。可能您需要
printf("|%-25s| |%-65s| |%-10d| |(%s,%d) |\n") title director year name rating
?
此外,整个列表理解看起来也有问题:
sequence_[printf | (title, director, year, [(name,rating)]) <- filmList]
您可能需要一些与上面一样的嵌套循环:一个用于扫描电影,另一个用于扫描相关的名称/评级。片段
printf("|%-25s| |%-65s| |%-10d| |(%s,%d) |\n") title director year [(name,rating)]
看起来错误:5个格式字符串%
参数,但4个参数。可能您需要
printf("|%-25s| |%-65s| |%-10d| |(%s,%d) |\n") title director year name rating
?
此外,整个列表理解看起来也有问题:
sequence_[printf | (title, director, year, [(name,rating)]) <- filmList]
您可能需要一些嵌套循环,如上所述:一个用于扫描电影,另一个用于扫描相关名称/评级。我现在还有另一个错误。分析模式中的错误:title可能是由于缺少“do”引起的?对于名称后的这部分,rating| title director year name rating您能给我一个如何使用f的示例吗orM_uuu或mapM_用于我的程序?因为我不熟悉它们。我现在还有另一个错误。模式中的解析错误:title可能是由于缺少“do”而导致的?对于名称后面的这部分,rating| title director year name rating你能给我一个如何在我的程序中使用forM_u或mapM_u的示例吗?因为我不熟悉它们。