假设想要计算函数:
f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2
Run Code Online (Sandbox Code Playgroud)
然后,如果f (-1,0)手动扩展,则获得:
((-1 `mod` 3)+(0 `mod` 3)) `mod` 2
1
Run Code Online (Sandbox Code Playgroud)
但是,如果使用内联函数,结果是:
let f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2 in f (-1,0)
0
Run Code Online (Sandbox Code Playgroud)
存储产生不是预期结果的函数时会发生什么?
我认为这是因为f使用Integral而不是Int?
看起来这是解析的问题.-1 `mod` 3解析为-(1 `mod` 3)和不解析(-1) `mod` 3.
*Main> -(1 `mod` 3)
-1
*Main> (-1) `mod` 3
2
Run Code Online (Sandbox Code Playgroud)
老实说,-哈斯克尔的一元作品的方式有点像黑客,我个人觉得很困惑.如果我真的需要一个负面的文字,我通常只是添加额外的括号来确定.
另一件需要考虑的事情是Haskell有两个模数函数,mod并且rem不同地处理负数.有关更多详细信息,请查看这 两个其他问题.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |