1

パラメータとは異なる戻り値を持つHas​​kell関数を作成したいと思います。例:関数のisOdd 3戻り値またはのいずれかがTrue必要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 Haskell には関数を紹介する章があります。

于 2013-03-06T16:40:25.930 に答える
3

ここでの問題は、それmodが infix ではないことです。さらに、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はあなたの友達です。

于 2013-03-06T16:39:32.567 に答える