0

解決できない簡単な質問ですが、割り当てが必要なため、次のコードで Maybe_divide を取得しようとしていましたが、端末にエラーメッセージが表示されます

test2.hs:1:112: パターンの解析エラー: (Just x)

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case maybeX maybeY of
  (Just x) (Just y)
    |x/=0 && y/=0 -> Just (div x y)
    |x=0 && y/=0  -> Just 0
    |x/=0 && y=0  -> Nothing
  Nothing (Just y) -> Nothing
  (Just x) Nothing -> Nothing

誰が私に何が悪いのか教えてくれるのが好きですか? ありがとう

4

1 に答える 1

4

maybeX maybeYmaybeX引数に関数を適用してmaybeYいますが、ペアでケース分析を行うつもりです(maybeX,maybeY)。また==、単一の ではなく for equality を使用する必要があります=。以下はあなたが意図したことを行います:

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = case (maybeX,maybeY) of
  (Just x,Just y)
    |x/=0 && y/=0 -> Just (div x y)
    |x==0 && y/=0  -> Just 0
    |x/=0 && y==0  -> Nothing
  (Nothing,Just y) -> Nothing
  (Just x,Nothing) -> Nothing

Maybe別の方法として、次のようにモナドを利用することもできます。

maybe_devide :: Maybe Float -> Maybe Float -> Maybe Float
maybe_devide maybeX maybeY = do
        x <- maybeX
        y <- maybeY
        case (x,y) of
                (0,y) -> Just 0
                (x,0) -> Nothing
                (x,y) -> Just (div x y)
于 2013-03-31T00:43:44.477 に答える