2012-04-29 44 views
12

Đôi khi tôi viết mã như thế nàySử dụng bảo vệ trong let .. trong các biểu thức

solveLogic :: Int -> Int -> Int 
solveLogic a b = 
    let 
     x = 1 
     brainiac 
      | a >= x  = 1 
      | a == b  = 333 
      | otherwise = 5 
    in 
     brainiac 

Và mỗi khi tôi có đôn đốc để viết những điều này mà không cần thiết "Brainiac" chức năng, như thế này:

solveLogic :: Int -> Int -> Int 
solveLogic a b = 
    let 
     x = 1 
    in 
     | a >= x  = 1 
     | a == b  = 333 
     | otherwise = 5 

Mã nào nhiều hơn "Haskellish". Có cách nào để làm điều này không?

+4

'brainiac' không phải là một chức năng, chỉ sayin'. –

Trả lời

39

Vâng, sử dụng một điều khoản where:

solveLogic a b 
     | a >= x  = 1 
     | a == b  = 333 
     | otherwise = 5 
    where 
     x = 1 
10

Khi tôi muốn bảo vệ như là một biểu tôi sử dụng Hack hơi xấu xí này

case() of 
_ | a >= x  -> 1 
    | a == b  -> 333 
    | otherwise -> 5 
+0

Nó phải là '->' thay vì '=' đối với các nhân viên báo cáo trường hợp. Tất cả trừ '_' đầu tiên có thể được bỏ qua. – leftaroundabout

+0

Đúng. Đã sửa. Cắt quá nhiều và dán. – augustss

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