2009-07-30 36 views
6

Tôi cố gắng để viết một hàm trả về giá trị tuyệt đối của một số nguyên ...giá trị tuyệt đối trong Haskell

abs :: Int -> Int 

abs n | n >= 0 = n 
     | otherwise = -n 


myabs :: Int -> Int 

myabs n = if n >= 0 then n else -n 

Cả hai đều làm việc cho nguyên dương nhưng số nguyên không âm. Bất kỳ ý tưởng nào tại sao?

Trả lời

10

Cả hai dường như chỉ làm việc tốt:

 
Main> myabs 1 
1 
Main> myabs (-1) 
1 
Main> abs 1 
1 
Main> abs (-1) 
1 
5

Ahh! Tôi không biết bạn phải bao gồm dấu ngoặc đơn trong ...

myabs (-1) 

ai đó vượt qua giới hạn rút gọn. dohhh

+4

Đây phải là nhận xét (bạn có thể làm điều đó ngay bây giờ). :) –

+2

^Tự tham chiếu: D –

4

Phải, bạn thường cần ngoặc đơn giá trị âm để làm sai lệch ưu tiên của toán tử. Để biết thêm chi tiết, xem Real World Haskell chapter 1.

Các vấn đề liên quan