2011-07-09 46 views
0

我已經定義了以下函數來確定直線截取直線圖的x軸的位置。它應該返回(Float, Bool),其中Float是該線與x軸交叉的位置,而BoolTrue(如果它在> 0時與x軸相交併且如果不是這樣,則與False相交)。查找x軸的截距--Haskell

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。你的表達式綁定名稱中不能有連字符。

2
  • x截距是x - intercept
  • x是詮釋,但你應該返回的元組浮動(如:fromIntegral
+0

啊ok了!謝謝你們的幫助。 – user832488

7

-是非法的,在Haskell的函數名(而不是爲Lisp方言) 。 GHC 7.0.3雖然產生更好的錯誤消息:

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

修復:重命名功能xIntercept。然後,您將面臨另一個問題:您使用變量x作爲IntFloat。這也是非法的,你必須使用fromIntegral來修復它。

5

正如其他人已經回答你的問題,我會建議在功能定義的設計更改。

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

這樣的功能將在情況下返回剛纔浮點值的行攔截否則將返回Nothing

+0

感謝安庫爾 - 是的,我同意這將是一個更合適的定義。 – user832488