我想从其参数创建具有不同返回值的Haskell函数,例如:
我希望函数isOdd 3
返回值True
或False
。
我试过了
isOdd :: Integer -> Bool
isOdd x = (if x mod 2 == 0 False else True)
但是它返回错误,任何人都可以帮助我吗?另外,是否有关于Haskell中的函数的教程?我找不到关于haskell功能的好教程。
答案 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就是您的朋友。