创建具有不同返回值的haskell函数

时间:2013-03-06 16:32:07

标签: function haskell

我想从其参数创建具有不同返回值的Haskell函数,例如: 我希望函数isOdd 3返回值TrueFalse。 我试过了

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

但是它返回错误,任何人都可以帮助我吗?另外,是否有关于Haskell中的函数的教程?我找不到关于haskell功能的好教程。

2 个答案:

答案 0 :(得分:14)

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

你不需要parens:

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功能相同。


您尝试过哪些教程?

了解你Haskell有一个chapter introducing functions

答案 1 :(得分:3)

这里的问题是mod不是中缀。另外,在Haskell中if语句的工作方式如下

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就是您的朋友。