在Haskell,
这非常合适:(mod 9) 7
。它给出了预期的结果:当9除以7( 2 )时的余数。
同样,这也适用:(mod 9) 9
。它返回 0 。
这让我认为(mod 9 == 0) 9
应该返回True
。然而,事实并非如此:它反而引发了错误。
错误:
<interactive>:62:1: error:
• Couldn't match expected type ‘Integer -> t’
with actual type ‘Bool’
• The function ‘mod 9 == 0’ is applied to one argument,
but its type ‘Bool’ has none
In the expression: (mod 9 == 0) 9
In an equation for ‘it’: it = (mod 9 == 0) 9
• Relevant bindings include it :: t (bound at <interactive>:62:1)
请帮助我理解为什么(mod 9 == 0) 9
不会返回True
。
P.S。:我确信我使用&#34;返回&#34;在Haskell的背景下是有缺陷的。但是,我刚刚开始,所以请原谅。 (如果你能纠正我,那将是很好的,如果我确实是错的。)
答案 0 :(得分:7)
正如我在评论中提到的,您希望mod 9 == 0
是一个接受参数的函数,将其传递给mod 9
,然后返回比较结果。你可以写出这样的表达,但它有点复杂。
>>> ((== 0) . (mod 9)) 9
True
此处,(== 0) . (mod 9)
是两个函数(== 0)
和mod 9
的组合。组合函数接受其参数,对其应用mod 9
,然后将(== 0)
应用于结果。 ((== 0)
是\x -> x == 0
的缩写形式。)