我想创建具有与其参数不同的返回值的 Haskell 函数,例如:我想要函数isOdd 3
返回值True
or False
。我试过了
isOdd :: Integer -> Bool
isOdd x = (if x mod 2 == 0 False else True)
但它返回一个错误,有人可以帮助我吗?另外,有没有关于 Haskell 函数的教程?我在haskell中找不到关于函数的好教程。
isOdd :: Integer -> Bool
isOdd x = (if x mod 2 == 0 False else True)
你不需要括号:
isOdd :: Integer -> Bool
isOdd x = if x mod 2 == 0 False else True
你错过了then
:
isOdd :: Integer -> Bool
isOdd x = if x mod 2 == 0 then False else True
当您mod
用作运算符时,您必须用反引号括起来:
isOdd :: Integer -> Bool
isOdd x = if x `mod` 2 == 0 then False else True
这样可行。
此外,您可以if blah then False else True
更简单地写为not (blah)
:
isOdd :: Integer -> Bool
isOdd x = not (x `mod` 2 == 0)
更简单的是:
isOdd :: Integer -> Bool
isOdd x = x `mod` 2 /= 0
请注意:这实际上与标准odd
功能相同。
您尝试过哪些教程?
Learn You A Haskell 有一章介绍函数。
这里的问题mod
是不是中缀。此外,在 Haskell 中,如果语句像这样工作
if cond then expr1 else expr2
注意then
.
你应该mod
这样使用mod x 2
。但是,您可以像这样使它中缀:
x `mod` 2
一边不
x `mod` 2 /= 0
比整个 if 语句更容易阅读。
至于教程:Learn You a Haskell for Great Good是一个好的开始。对于更深入的报道Real World Haskell非常好。
如果您只想找到一个功能,那么Hoogle就是您的朋友。