【问题标题】:Parse error on input ‘where’ in Haskell在 Haskell 中输入“where”时解析错误
【发布时间】:2017-08-16 23:42:33
【问题描述】:

所以我试图创建一个错误的排序函数,给定一个列表,在删除重复项的同时对其进行排序,然后用“0s”填充列表的开头以确保排序错误的新列表的长度是与原始列表的大小相同。

这是我的代码:

dodgySort4 xs = (replicate ((length xs) - (length (badQuick xs)) 0) : badQuick xs
  where
    badQuick  [] = []
    badQuick (x:xs) = (badQuick lesser) ++ [x] ++ (badQuick greater)
      where
          lesser  = filter (< x) xs
          greater = filter (> x) xs

但是,我在第一个 where 开始时不断收到“输入‘where’时的解析错误”错误,我不太确定问题出在哪里?

【问题讨论】:

  • @kennytm 哦,哎呀,这是我在写问题时犯的一个错误。实际代码没有换行
  • 所以没有实际错误?或者有吗?顺便说一句,你的badQuick 真的很糟糕,它丢失了所有等于x 的值,例如badQuick [1,1,1,1,1,1,1] 将是 [1]
  • @Zeta 没有错误!我只是在将代码写入问题时不小心添加了新行。是的,哈哈,这就是 badQuick 的目的——它会删除所有重复项,这就是为什么我用 0 填充开头,所以它的长度与原始列表的长度相同...... (xs) = 长度(dodgySort4(x)

标签: haskell


【解决方案1】:

这与where 无关,)replicate 不匹配。类型也不匹配,把:改成++修复问题。

dodgySort4 :: (Ord a, Num a) => [a] -> [a]
dodgySort4 xs = (replicate ((length xs) - (length (badQuick xs))) 0) ++ badQuick xs
  where ...

【讨论】:

  • 为避免将来出现这些问题,您可以删除每个 length 函数周围的括号,因为函数应用程序的绑定比 - 更紧密。
猜你喜欢
  • 2014-02-07
  • 2016-01-11
  • 2018-05-02
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多