【问题标题】:haskell parse error incorrect identation?haskell解析错误缩进不正确?
【发布时间】:2018-11-25 16:40:56
【问题描述】:

我正在尝试编写一个程序,该程序在输入中接受由列表列表(例如 [[1,2],[3,4],[5,6]])构成的矩阵,并将其转置作为输出 [[1,3,5],[2,4,6]]

此版本有效,但由于它到达列表末尾并且不会停止,因此会出错。

transpose xxs = map head xxs : transpose (map tail xxs)

所以我尝试了这个

transpose xxs = if ((length xxs)>0) then 
            map head xxs : transpose (map tail xxs)

但我得到了错误

解析错误(可能是不正确的缩进或不匹配的括号)

所以我尝试编写没有括号的代码,全部在一行中,没有缩进,但我没有设法解决这个错误。

我开始怀疑这不是括号或空格的问题。

【问题讨论】:

  • 你错过了else。而且缩进确实不正确。

标签: haskell


【解决方案1】:

我无法开始猜测为什么编译器会给出错误消息,但在 Haskell 中,所有 if/then 表达式也需要 else 大小写:

transpose xxs =
  if (length xxs) > 0
  then map head xxs : prova (map tail xxs)
  else [[]]

这里我只是将[[]] 放在else 分支中,因为这是我能想到的满足编译器的最简单的方法。

【讨论】:

  • 它解决了问题,但我得到了异常Exception: Prelude.head: empty list
  • @AleA 这听起来像是一个新问题(如果它不是重复的):)
猜你喜欢
  • 2014-05-05
  • 2021-01-25
  • 2015-01-26
  • 2018-01-21
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多