2011-07-09 5 views
0

私は線が直線グラフのx軸を遮る場所を決定するために、次の関数を定義しています。これはFloatラインがx軸と交差し、そうでない場合、それは> 0及びFalseにx軸を満たす場合BoolTrueある場所である(Float, Bool)を返すべきです。は、x軸の切片を見つける - ハスケル

x-intercept :: (Int, Int) -> (Float, Bool) 
x-intercept (x,y) 
    | x>0 = (x, True) 
    | otherwise = (x, False) 

しかし、私は次のエラーを取得しています:

Syntax error in declaration (unexpected ';' , possibly due to bad layout)

私が間違ってやっている任意のアイデア?

答えて

2

HaskellはLispのではありません。 expression-binding-nameにハイフンを使用することはできません。

2
  • x切片はx - intercept
  • xはintですが、あなたは、タプル(例:fromIntegral)でのフロートを返す必要があります(Lispの方言ではなく)
+0

を返しませんラインインターセプト場合だけのfloat値を返します。この方法では!あなたの助けを借りてくれてありがとう。 – user832488

7

-はHaskellでは関数名では違法です。 GHC 7.0.3は、しかし、より良いエラーメッセージを生成します。

Invalid type signature: x - intercept :: (Int, Int) 
             -> (Float, Bool) 
Should be of form <variable> :: <type> 

は修正:xInterceptにあなたの関数の名前を変更します。その後、あなたは別の問題に直面することになります:あなたはIntようとFloatとして変数xの両方を使用しています。これは、同様に違法である、あなたはそれを修正するためにfromIntegralを使用する必要があります。

5

他の人がすでにあなたの質問に答えてきたように、私は、関数定義の設計変更を示唆しています。

x-intercept :: (Int, Int) -> Maybe Float 

関数は、それ以外の場合は、[OK]をああ何

+0

ありがとうAnkur - はい私はこれがより適切な定義であることに同意します。 – user832488

関連する問題