haskell 如何保存跨不同函数的元组列表

d7v8vwbk  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(150)

我想写一个文件,里面有关于我什么时候可以安排考试的信息,日期(所有考试都有天数限制)和哪个房间(给定有限数量的房间),但是要根据具有所有科目的编号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”的文件中收到一个元组列表,根据最初的问题给我的所有限制。

t0ybt7op

t0ybt7op1#

假设你正在编写一个Haskell程序来创建一个整数列表,从某个起始整数n1。如果你用类似于atribuituplesala函数的样式编写它,它看起来会像这样:

countdown n lst = do
  if n > 0 then
    lst ++ [n]
    countdown (n-1) lst
  else
    return ()

但是这个解决方案有一个相当大的问题:作为Haskell代码,这没有任何意义!没有一件是正确的。
表达式lst ++ [n]不会将n附加到lst。将两个表达式放在“then“关键字后面的单独行上:

lst ++ [n]
 countdown (n-1) lst

不会按顺序“运行”这些表达式。最终语句return ()不会“停止处理”并返回最终列表。
您对Haskell工作方式的大多数假设都是错误的,这些代码都不会按您的意图工作。
(If这有助于理解我的来源,假设你懂一点Python,想象一个朋友带着他们的Python代码来找你,把数字从1到100相加,并向你展示了这样的东西:

x = 1
result = 0
if x < 100:
    x + 1
    sum(result,x)
    pass
else:
    return result

即使你可以从这些代码中理解他们的思维过程,也没有办法帮助他们修复它,除非从头开始重写。很明显,你的朋友甚至没有学习Python的绝对基础知识--变量赋值、循环和函数是如何工作的--他们必须在解决这样一个简单的问题之前,通过一些初学者教程和学习材料来完成。
所以,本着这种精神,我认为你还没有学到Haskell的绝对基础知识。在解决这样的问题之前,你应该先学习一些教程和学习材料。
这个SO问题的答案提供了一些好的资源。

相关问题