【问题标题】:Why complains Haskell parse error on input `|' in this Function?为什么在输入“|”时抱怨 Haskell 解析错误在这个函数中?
【发布时间】:2014-09-15 03:03:01
【问题描述】:

我应该在 Haskell 中编写一个小函数,它应该删除列表中出现两次的元素。不幸的是,Haskell 抱怨“输入 `|' 上的解析错误”。谁能帮我解决这个问题?

makeSets=mSet[]s
         where 
            mSet stack []=stack
            mSet stack (x:xs)
                             |contains stack x=mSetstack xs
                             | otherwise =mSet (x:stack) xs
                                          where 
                                                contains [] thing=False
                                                contains (x:xs)thing
                                                                     | x==thing=True
                                                                     |otherwise=contains xs thing

【问题讨论】:

  • 你在使用标签吗?如果是这样,请切换到使用空格。 GHC 将选项卡视为固定大小,并且该固定大小必须满足某些标准。您可能没有将您的编辑器设置为相同的大小,因此有时您可能会得到一些看起来语法正确但不是因为列的缩进不足以用于 GHC 的内容。此外,您可以将mSetcontains 的定义放在同一个where 子句中,不需要第二个。喜欢this
  • 此外,您的contains 函数与带有交换参数顺序的内置elem 函数相同,如果您真的想创建一个集合,那么您可以导入Data.Set 并且只需使用Set 类型,它会自动为您保持集合的唯一性。

标签: haskell parse-error


【解决方案1】:

您正在混合制表符和空格,这在缩进很重要时是不好的。使用所有空格(强烈推荐)或所有制表符。

【讨论】:

  • @HerrSchwarz 您可以将优秀的编辑器设置为使用空格而不是制表符进行缩进。如果你这样做了,它就不会再咬你了,你仍然可以随心所欲地使用 Tab 键!
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多