在haskell中定义一个函数

时间:2015-11-16 11:59:37

标签: haskell

为什么我的功能会让我超出范围错误?

{
  "posts": [
    {
      "student": "Andreas",
      "level": 4
    },
    {
      "student": "Andreas",
      "level": 3
    },
    {
      "student": "Eivind",
      "level": 4
    },
    {
      "student": "Eivind",
      "level": 5
    },
    {
      "student": "Ole",
      "level": 4
    },
    {
      "student": "Ole",
      "level": 3
    }
  ]
}

错误:

tarefa1 :: [String] -> [String]
tarefa1 linhas = if res == ok then ["OK"] else [show res]
  where
    (tab,coords) = parteMapa conteudo
    erro1 = validaTabuleiro 1 tab
    erro2 = validaCoords (length tab + 1) tab coords
    res = juntaErro erro1 erro2

Not in scope: `conteudo'. 应该是我在不同文件中的.txt文档,但我不知道如何在此函数中加载它。

1 个答案:

答案 0 :(得分:1)

这不是一个很好的问题,因为这应该由基本的Haskell知识涵盖,并且它显然是我们这些能说葡萄牙语的人的作业。你不应该害怕向老师寻求帮助,我相信他很乐意给你这个。

尽管如此,由于可能回答这个问题,我会:

Haskell中的输入和输出只能在评估IO操作的函数内(即IO类型的值)。

当然,由于main的类型为IO (),因此您可以在其中执行IO操作。

读取文件的最简单方法是使用readFile函数。它接受FilePath并评估为IO String(其中包含文件的完整内容)。我会给你一个例子,我希望你能从中得到它。

main :: IO ()
main = do
  contents <- readFile "yourfilename.txt" -- because I used "<-", contents has type String
  let fileLines = lines contents -- here I have a [String] with each line of the file
  someFunction fileLines
  return ()
在此示例中,

someFunction还应评估IO操作。你可以把东西放进去&#34; IO使用return,以防您不知道。

相关问题