【发布时间】:2019-07-24 14:28:43
【问题描述】:
通过较早的考试,我复制了这段代码并试图让它工作。
rems :: Integer -> [(Integer ,Integer )]
rems n = [(i, n `mod` i) | i <- [2 ..(n−1)]]
现在无论有没有类型声明,我都会收到错误:
Variable not in scope: (−) :: Integer -> Integer -> Integer
ghc version 8.6.3
我能够通过在 where 子句中计算 n-1 来修复它,但我不明白为什么这是一个修复。我当然知道 Haskell 中的 Integer 是什么。
rems n = [(i, n `mod` i) | i <- [2 ..j] ]
where j = n-1
有人可以向我解释一下为什么这种看似没有效果的更改确实可以解决错误,还有其他方法吗?
【问题讨论】:
-
这很奇怪,因为当我复制粘贴您的定义时,我得到了类似的错误(但使用
?而不是-),但自己输入 - 逐个字符重复,看来 - 它工作正常。我只能假设你也在复制粘贴并且那里有某种看不见的控制字符? -
刚刚尝试了一个在线差异检查器,它突出了最后一部分的差异:
..(n−1)]]。不过还是看不出来是什么。无论哪种方式,这似乎都不是真正的 Haskell 问题。 -
找到了,看来你的
-实际上是这样的:fileformat.info/info/unicode/char/2212/index.htm - unicode U+2212,而不是标准的减号U+002D