1

我想创建具有与其参数不同的返回值的 Haskell 函数,例如:我想要函数isOdd 3返回值Trueor False。我试过了

isOdd :: Integer -> Bool
isOdd x = (if x mod 2 == 0 False else True)

但它返回一个错误,有人可以帮助我吗?另外,有没有关于 Haskell 函数的教程?我在haskell中找不到关于函数的好教程。

4

2 回答 2

14
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 有一章介绍函数

于 2013-03-06T16:40:25.930 回答
3

这里的问题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就是您的朋友。

于 2013-03-06T16:39:32.567 回答