gpt4 book ai didi

Haskell IO 无法让列表围绕菜单功能循环

转载 作者:行者123 更新时间:2023-12-02 12:30:53 24 4
gpt4 key购买 nike

我目前正在用 haskell 制作一个基于文本的菜单系统。我创建了一个名为 Book 的数据类型,其中每个函数都会编辑列表并返回它。但是,我无法弄清楚如何使菜单部分可以编辑此列表并递归回来。

关于我所坚持的例子菜单有效,将一本书添加到列表中,然后,菜单需要重新加载菜单,以便我可以显示添加了新内容的书籍。

菜单示例

menu:: [Book] -> [IO]
menu books = do
str <- getLine
let selectNum = (read str :: Int)
case selectNum of
1 -> let sd = addNewBookIO books
2 -> displayAllBooksFromYear books

添加新书的示例

addNewBookIO :: [Book] -> IO [Book]
addNewBookIO films =
do putStr "Film name: "
filmTitle <- getLine
putStr "List all cahr in the Book (separated by commas): "
cast <- addToStringArray []
putStr "Year of Realese in the UK: "
year <- getLine
let test = (read year :: Int)
putStr "List all the fans(separated by commas): "
fans <- addToStringArray []
putStrLn "Your Book has been added"
let bookList = addbookFilm (Film bookTitle cast test fans) films
return bookList

如有任何帮助,我们将不胜感激

最佳答案

目前,您的 menu 类型签名没有任何意义。你的意思是这样吗?

menu :: [Book] -> IO [Book]

如果是这样,那么您可以将其定义为

menu books = do
str <- getLine
case read str of
1 -> do books' <- addNewBookIO books -- add a new book, then loop
menu books'
2 -> displayAllBooksFromYear books >> menu books -- display books, then loop
3 -> return books -- quit

这会从用户那里读取一个字符串,然后添加一本新书,显示当前的书籍列表,或者结束循环,返回书籍列表。

编辑: >> 运算符将两个操作序列在一起。组合 a >> b 表示“执行 a,然后执行 b”。

下面的两段代码是完全等价的(事实上,第一段代码只是第二段代码的语法糖)

do displayAllBooksFromYear books
menu books

displayAllBooksFromYear books >> menu books

希望有助于解决问题。

关于Haskell IO 无法让列表围绕菜单功能循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com