我必须要求用户在Products.txt中输入产品的代码,名称和价格。
produtoPath::FilePath
produtoPath = "Products.txt"
adicionaProd::IO()
adicionaProd = do
putStr "Product's Code:"
cod<-getLine
putStr "Product's Name:"
nom<-getLine
putStr "Product's Price:"
pre<-getLine
-- appendFile produtoPath
putStr "Do you want to add some other product?"
resp <- getLine
if ((resp == "y")) then adicionaProd else return()
所以,在添加产品之后,我必须创建另一个函数来读取Products.txt的内容,并返回Products ...类型Products = [(代码,名称,价格)],我这样做不知道怎么做... 我试过了,但我做不到。
generateList:: [[String]]-> Produtos
generateList [] = []
--generateList [[cod,nom,pre]:[]] = [(read:cod)::]
之后,我必须使用loadProducts函数加载产品...它读取上一个函数的文件,并返回IO Products类型,以便用户可以以格式显示文件中的内容产品类型。
loadTable:: IO Produtos
loadTable = do
s<-readFile produtoPath
-- return generateList (map words)
总结:我不知道我应该如何将数据保存在&#34; addProd&#34;函数,读取文件并生成产品cpm的generateList函数,并使用loadTable函数将它们加载到用户。可以帮帮我吗? 我所做的完整代码:https://ideone.com/Al9ZLf
答案 0 :(得分:1)
您可能需要从<{1}}返回输入数据。所以,它的类型必须成为
adicionaProd
然后,您调整代码本身
type Products = [(Code, Name, Price)]
adicionaProd :: IO Products
这个想法是:如果响应是&#34;是&#34;,那么您递归地询问产品列表,并将其绑定到 adicionaProd = do
putStr "Product's Code:"
cod<-getLine
putStr "Product's Name:"
nom<-getLine
putStr "Product's Price:"
pre<-getLine
let prod :: (Code, Name, Price)
prod = (read cod, nom, read pre)
putStr "Do you want to add some other product?"
resp <- getLine
if resp == "y" then do
rest <- adicionaProd
return (prod : rest)
else
return [prod]
。然后,您将返回包含您的产品的列表,然后返回其余部分。如果响应为&#34; no&#34;,则仅返回包含第一个产品的列表。