2015-10-24 28 views
0
def :: (Int, Int) -> (Int, Int, Int) 
def (x, y) 
| x == 0 && y == 0 = (0, 1, 0) 
| otherwise = (fromIntegral x/34, y, a) 
    where a = x + y 

總是得到消息不正確的縮進或不匹配的括號。甚至試圖用where結構排除一個變量。我也不確定我是否做了聲明並且從整體上正確正確使用從積分和不匹配的括號

回答

4

您需要比周圍環境(在本例中爲def)多縮進警衛。您還有一些類型錯誤,其中大部分可以通過自由應用fromIntegral來處理。我發現的唯一另外一件明顯的事情是,00不是一個三元組 - 也許你的意思是(0, 0, 0)而不是?但如果你這樣做了,看起來第二個條款將會返回;所以也許你根本不需要任何警衛。

您也可以考慮更改類型def :: Double -> Double -> (Double, Double, Double)並把它留給調用者來處理轉換從IntDouble,儘管這是一個設計選擇取決於很多對def的意義和它在更大的系統中的作用。

+0

感謝您的回答。我試圖縮進守衛莫右,但它不工作。 當x和y = 0時,應該給出0,0,0,0。用逗號甚至可以嗎? – letter

+0

逗號是元組構造的一部分,所以它們被要求構造一個元組。 –

+0

顯然,聲明def ::(Int,Int) - >(Int,Int,Int)是不正確的。但我喜歡結果是Integer。我該怎麼做呢? – letter