1

こんにちは、私はこれを自分で理解できず、オンラインで例を見つけることもできませんでした

たぶんまたはガードを使用しようとしていますが、見つかった例には2つの変数しかありません.2つ以上の例を編集またはフォローすると、エラーが発生します。

--maybe example
    Fun :: Double -> Double -> Double -> Maybe Double
    Fun a b c
        | a >= -1.0 || a <= 1.0 || b >= -1.0 || b <=1.0 || c /=0 || c >= -1.0 = Nothing
        | otherwise = Just max(  ((c^ (-c)) +   (a^(-c)-1.0)  ^   (a+ (-1.0/a)))     0.0)

gchiのエラー

 The function `Just' is applied to two arguments,
    but its type `a0 -> Maybe a0' has only one

フリントが与えている間

No suggestions

代わりにガードを使用しようとすると、別のエラーが発生します

--guard example
    Fun :: Double -> Double -> Double -> Maybe Double
    Fun a b c
        | a >= -1.0 || a <= 1.0 || b >= -1.0 || b <=1.0 || c /=0 || c >= -1.0 = error "Value out of range "
        | otherwise = max(  ((c^ (-c)) +   (a^(-c)-1.0)  ^   (a+ (-1.0/a)))     0.0)

そしてheres ghcとhlintsエラー

  test.hs:10:1:
        Invalid type signature: Fun :: Double
                                       -> Double -> Double -> Maybe Double
        Should be of form <variable> :: <type>
    $ hlint test.hs
 Error message:
  Left-hand side of type signature is not a variable: Fun
Code:
    Fun :: Double -> Double -> Double -> Maybe Double
  > Fun a b c
4

2 に答える 2

7

関数は小文字で記述する必要があります。これは、次のように書くことを意味します。

fun :: Double -> Double -> Double -> Maybe Double
fun a b c ...

Data.List大文字の識別子はモジュール (たとえば)、型コンストラクター、データ コンストラクター ( IntorMaybeや など) などのために予約されているため、関数を大文字で始めることはできませんJust

Justコンストラクターの適用にも問題があります。これを書くと:

Just max(something)

... 次と同じ意味です。

Just max something

つまり、Just2 つの引数を指定しています。括弧を調整してこれを修正する必要があります。

Just (max something)
于 2012-05-24T16:49:47.487 に答える
3

構文エラー、主に:

f :: Double -> Double -> Double -> Maybe Double
f a b c
    |  a >= -1
    || a <=  1
    || b >= -1
    || b <=  1
    || c /=  0
    || c >= -1
     = Nothing

    | otherwise
     = Just $ max ((c ** (-c)) + (a ** (-c)-1) ** (a+ (-1/a))) 0

より一般的に型付けされた指数演算子 , の使用に注意し(**)$ください。Justmax

于 2012-05-24T16:51:19.570 に答える