Haskell 中一元运算符的前缀形式
在 GHCi 中:
- 前奏> (+3) 2
5- 前奏> (*3) 2
6- 前奏> (/3) 2
0.6666666666666666- 前奏> (-3) 2
没有 (Num (t -> t1)) 的实例
由:1:2
处的文字3' 产生 可能的修复:为 (Num (t -> t1)) 添加实例声明
it' 的定义中:it = (- 3) 2
表达式中:3
表达式中: (- 3) 2
在
如何更正最后一个使其返回-1?
In GHCi:
- Prelude> (+3) 2
5- Prelude> (*3) 2
6- Prelude> (/3) 2
0.6666666666666666- Prelude> (-3) 2
No instance for (Num (t -> t1))
arising from the literal3' at <interactive>:1:2
it': it = (- 3) 2
Possible fix: add an instance declaration for (Num (t -> t1))
In the expression: 3
In the expression: (- 3) 2
In the definition of
How can I correct the last one to make it return -1?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Haskell 的语法不允许你像这样使用
-
。请改用subtract
函数:Haskell's grammar doesn't allow you to use
-
like that. Use thesubtract
function instead:作为 grddev 的答案的脚注,这里是相关的Haskell 98 报告中的段落:
当我第一次遇到它时,这让我感到沮丧:我无法理解为什么当
:info (+)
和:info (-)< 时运算符在这种情况下的行为如此不同/code> 看起来基本相同。
您可以使用
subtract
,正如 grddev 所建议的那样,或者您也可以定义一个新的中缀运算符:subtract
的优点是其他可能阅读您代码的人会很熟悉。As a footnote to grddev's answer, here's the relevant paragraph from the Haskell 98 Report:
This is something that frustrated me when I first came across it: I couldn't understand why the operators behaved so differently in this context when
:info (+)
and:info (-)
looked basically identical.You could use
subtract
, as grddev suggests, or you could just define a new infix operator:subtract
has the advantage of being familiar to other people who might read your code.你可以这样做,
但这会给你 1。要得到 -1,你需要将 3 绑定到 - 的第二个参数,你可以使用
You can do
but that will give you 1. To have -1, you need to bind the 3 to the second argument of -, which you can do using
如果你想保持原来的形状,你可以随时添加负数:
它不漂亮,但它更适合你的图案。
If you're intent on keeping your original shape, you can always add the negative:
It ain't pretty, but it fits your pattern a little bit more.