我想写一个文件,里面有关于我什么时候可以安排考试的信息,日期(所有考试都有天数限制)和哪个房间(给定有限数量的房间),但是要根据具有所有科目的编号ID、科目的年份和科目的名称的文件来定义考试科目,所有这些都在单独的行中,同一间屋子里不能有多个考试
我想把每个主题的3个值存储在一个元组列表中,所以当我打印出来时,我只得到一个元组列表。我试图在Haskell中解决这个问题,到目前为止,我已经达到了这一点,但是,我似乎无法理解这段代码给我带来的错误。
很抱歉这个愚蠢的问题,对Haskell来说有点陌生,变量和函数名也不是英文的。
atribuituple dias sala (li:lis) tupleList = do
if dias > 0 then
atribuituplesala dias sala last(words li) tupleList
atribuituple (dias-1) sala lis tupleList
else
return()
atribuituplesala dias sala uc tupleList = do
if sala > 0 then
tupleList ++ (dias,sala,uc)
atribuituplesala dias (sala-1) uc tupleList
else
return()
save_uc_dia dias sala = do
ucs <- openFile "ucs.txt" ReadMode
exames_uc_dia_sala_W <- openFile "exames_uc_dia_sala.txt" WriteMode
let tupla = []
atribuituple dias sala (lines ucs) tupla
writeFile "exames_uc_dia_sala.txt" tupla
hClose ucs
hClose exames_uc_dia_sala_W
我期望在一个名为“exames_uc_dia_sala.txt”的文件中收到一个元组列表,根据最初的问题给我的所有限制。
1条答案
按热度按时间t0ybt7op1#
假设你正在编写一个Haskell程序来创建一个整数列表,从某个起始整数
n
到1
。如果你用类似于atribuituplesala
函数的样式编写它,它看起来会像这样:但是这个解决方案有一个相当大的问题:作为Haskell代码,这没有任何意义!没有一件是正确的。
表达式
lst ++ [n]
不会将n
附加到lst
。将两个表达式放在“then
“关键字后面的单独行上:不会按顺序“运行”这些表达式。最终语句
return ()
不会“停止处理”并返回最终列表。您对Haskell工作方式的大多数假设都是错误的,这些代码都不会按您的意图工作。
(If这有助于理解我的来源,假设你懂一点Python,想象一个朋友带着他们的Python代码来找你,把数字从1到100相加,并向你展示了这样的东西:
即使你可以从这些代码中理解他们的思维过程,也没有办法帮助他们修复它,除非从头开始重写。很明显,你的朋友甚至没有学习Python的绝对基础知识--变量赋值、循环和函数是如何工作的--他们必须在解决这样一个简单的问题之前,通过一些初学者教程和学习材料来完成。
所以,本着这种精神,我认为你还没有学到Haskell的绝对基础知识。在解决这样的问题之前,你应该先学习一些教程和学习材料。
这个SO问题的答案提供了一些好的资源。