我在Haskell中編寫了一個函數,它在飛機上需要三個點, 並檢查它們是否在一條直線上,或者右轉或左轉。Haskell函數不終止
Here's代碼:
detDirection :: Point -> Point -> Point -> Direction
detDirection [email protected](Point (x1, y1)) [email protected](Point (x2, y2)) c
= if (collinear1 a b c)
then Straight
else let
ab = Vector [x2 - x1, y2 - y1]
angleAbX = angle ab (Vector [1, 0])
(Point (x1, y1)) = turnAtP a b angleAbX
(Point (x2, y2)) = turnAtP a c angleAbX
in if (y1 > y2)
then Right
else Left
從來就在GHCI測試collinear1
,angle
,turnAtP
,他們都立即終止。然而, detDirection
會一直運行。
有人能告訴我這裏的問題在哪裏嗎?
試圖逐行逐行通過它? – 2010-01-24 23:01:00
打開GHCi中的':set-Wall'的警告,你會清楚地知道你做錯了什麼。 – ephemient 2010-01-25 05:11:37