Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在IO Haskell中正确使用printF命令_Haskell_Io_Printf - Fatal编程技术网

在IO Haskell中正确使用printF命令

在IO Haskell中正确使用printF命令,haskell,io,printf,Haskell,Io,Printf,键入UserRatings=(字符串,Int) 电影类型=(片名、导演、年份、, [用户评级]) 我正在尝试为IO使用适当的printF方法,但我无法找出哪里出了问题。我知道问题与用户评级有关 在neo.txt文件中,有25个胶片类型,我正在尝试在我制作的用户界面菜单中打印它们 用户输入main->然后输入用户名->然后选择“2”,然后应该显示电影 displayFilmsIO :: Database -> IO() displayFilmsIO [] = putStrLn

键入UserRatings=(字符串,Int)
电影类型=(片名、导演、年份、, [用户评级])

我正在尝试为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的示例吗?因为我不熟悉它们。